stipe
Messages postés33Date d'inscriptionjeudi 10 avril 2003StatutMembreDernière intervention30 décembre 2004
-
25 nov. 2004 à 16:35
cs_Prince Charmant
Messages postés34Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention30 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)
cs_Prince Charmant
Messages postés34Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention30 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...
cs_Prince Charmant
Messages postés34Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention30 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