je ai une connection asynchrone a une db, seulement lorsque sa prend trop de temps j'aimerai annuler cette connection

voila le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
Private Function createConnection() As Boolean
    Dim cnn As ADODB.Connection
    On Error GoTo fail
    Set cnn = New ADODB.Connection
    cnn.ConnectionTimeout = TIMEOUT_CON '10 sec de time out
    Dim lngStartTime As Long
    lngStartTime = GetTickCount()
    cnn.Open m_chaineDeConnexion, , , adAsyncConnect
    '-----------'
    'Attente que la connexion soit établie
    Dim crt As Long
    While (cnn.State = adStateConnecting)
        DoEvents
        crt = GetTickCount() - lngStartTime
        If crt > TIMEOUT_CON * 1000 Then
            cnn.Close 'ou cnn.Cancel <=======================
        End If
    Wend
   '-----------'
    Set m_connection = cnn
    createConnection = True
    Exit Function
fail:
    createConnection = False
  'Vérification des erreurs dans le cas d'une mauvaise connexion
  If cnn.Errors.Count > 0 Then
    'Affichage des erreurs
    MsgBox cnn.Errors.Item(0)
  Else
    MsgBox Err.Description
  End If
End Function
lorsque le time out se produit si je declance un cnn.close sa declanche l'erreur suivante : Vous ne pouvez pas faire cela sur une connection asynchrone

lorsque je met un cnn.cancel, il reste bloquer sur la ligne pendant une 30aine de sec

deplus le cnn.ConnectionTimeout = TIMEOUT_CON '10 sec de time out ne fonctionne absolument pas puisqu'il reste dans la boucle while 30 sec (time out par default !!) bref j'y comprend rien !

if Anybody has a solution ...

Apres d'autre test : si je fait un set Cnn = Nothing, meme comportement que cnn.cancel ... il s'arrete sur la ligne ... attend puis repart apres environ 30 sec