Allora metti nel form un timer e setta la proprietà Interval a 100.
L' istruzione cmdAS400Lib.Execute la metti in una sub che chiami
DoQuery. Dichiara blResp come boolean. Dichiara l'api Sleep
codice:
Dim blResp As Boolean
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub DoQuery()
blResp = False
cn.Execute
blResp = True
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False
DoQuery
End Sub
Private Sub Command1_Click()
Dim TimeCount As Long
TimeCount = 0
Timer1.Enabled = True
Do While True
DoEvents
Sleep 500
Time Count = TimeCount + 500
If TimeCount > 5000 Then Exit Do
If blResp Then Exit Do
Loop
If blResp Then
' Fai qualcosa con il risultato della query
Else
' Stoppi la connessione
Set cn = Nothing
' Dai la segnalazione di errore
MsgBox "Errore di Time Out ......."
End If
End Sub
Il meccanismo è questo :
1) Al click sul bottone, parte il Timer
2) Subito dopo la tua applicazione entra nel ciclo Do while
3) Dopo un decimo di secondo il Timer si stoppa e lancia DoQuery
che in questo modo è asincrona al ciclo.
4) Intanto il ciclo conta i millisecondi grazie a Sleep
5) Se la execute della query risponde, il valore di blResp è true
ed il ciclo lo scopre e termina
6) Altrimenti il ciclo termina comunque dopo 5 secondi
7) Testi blResp per comportarti di conseguenza
Le mie prove danno esito positivo. Prova anche tu e fammi sapere.
Ciao,