Pb avec des connections dans une classe

stipe Messages postés 33 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 30 décembre 2004 - 25 nov. 2004 à 16:35
cs_Prince Charmant Messages postés 34 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 30 novembre 2004 - 25 nov. 2004 à 19:05
bonjour,

j'ai créé un usercontrol qui contient une datacombo (DtcKeyboard)+ un ADO (ADOKeyboard)
dans ma classe, j'ai le code suivant :

Public Property Get RowSource() As Adodc
Set RowSource = DtcKeyboard.RowSource
End Property

Public Property Set RowSource(ByVal New_RowSource As Adodc)
Set DtcKeyboard.RowSource = New_RowSource
PropertyChanged "RowSource"
End Property

j'ai une fonction qui me connecte à une BD et appelle entre autre le code Set DtcKeyboard.RowSource = ADOKeyboard

le probleme est que quand je lance plusieurs fois mon programme, j'ai un tas de sessions ouvertes sous Oracle, et au bout d'un moment, ça explose!! et ces sessions se ferment non pas quand j'arrete mon programme, mais quand je ferme VB...
Je voulais donc savoir comment je pouvais faire pour "killer" tous ces process, c'est à dire liberer mes ADO lorsque j'arrete mon programme (j'ai essayer Set ADOKeyboard = Nothing, mais ça ne compile pas)

merci d'avance

2 réponses

cs_Prince Charmant Messages postés 34 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 30 novembre 2004
25 nov. 2004 à 18:59
Salut,

Il ne faut pas oublier quand tu changes ta valeur de RowSource (Property Set) de vérifier si celle-ci n'était pas déjà ouverte sur quelque chose (Not IsNull(DtcKeyboard.RowSource)). Dans ce cas, il faut penser à refermer cette connexion, sinon elle reste ouverte par VB (=> fermeture en quittant VB).

On peut rencontrer le même problème avec les Sockets (on les ouvrent sans pb, puis d'un coup ça ne marche plus, jusqu'à ce que l'on relance VB).

Donc, avant de placer une valeur dans RowSource, referme l'ancienne...

A+
0
cs_Prince Charmant Messages postés 34 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 30 novembre 2004
25 nov. 2004 à 19:05
A aussi, pour refermer une connection, essayes :
On Error Resume Next
DtcKeyboard.RowSource.Close
If Err.Number<>0 Then Err.Clear
On Error Goto 0

il vaut mieux entourer le code de fermeture par des redirections d'erreurs et fermer coute-que-coute. En effet, il est possible d'avoir une recordset Ouvert, déjà Fermé ou même Nothing... Donc

A+
0