Вообщем, сегодня у нас на редкость паршивый диалап, поэтому сорри, обойдусь без аттачей.
Но если создать форму, положить на нее листбокс и подключить ADO, то можно посмотреть на поведение этого кода:
- Код: Выделить всё
Option Explicit
Dim WithEvents c As ADODB.Connection
Dim WithEvents r As ADODB.Recordset
Private Sub c_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
List1.AddItem "Connection_ConnectComplete"
End Sub
Private Sub c_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
List1.AddItem "Connection_ExecuteComplete"
List1.AddItem "First item: " & pRecordset.Fields(0).Value
List1.AddItem "RecordCount: " & pRecordset.RecordCount
End Sub
Private Sub Form_Click()
Debug.Print r.Fields(0)
r.MoveNext
End Sub
Private Sub Form_Load()
Set c = New ADODB.Connection
c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\WORK\VBProgs\Totalizator\tdata.mdb"
Set r = New ADODB.Recordset
Set r.ActiveConnection = c
r.CursorLocation = adUseClient
List1.AddItem "* Prepared"
r.Open Source:="select * from [KLADR-ADR]", Options:=ADODB.ExecuteOptionEnum.adAsyncExecute Or ADODB.ExecuteOptionEnum.adAsyncFetchNonBlocking
List1.AddItem "* Executed"
End Sub
Private Sub r_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
List1.AddItem "Recordset_FetchComplete"
End Sub
Private Sub r_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
List1.AddItem "Recordset_FetchProgress" & " (" & Progress & "/" & MaxProgress & ")"
End Sub
KLADR-ADR -- достаточно большая таблица и вытяжка данных занимает пару минут, так что можно покликать по форме и убедится, что форма (текущий поток) не блокируется.
Можно также поискать по "*FetchProgress*". Что любопытно, там
Konst_One уже давал совет насчет adAsyncFetchNonBlocking
vbskb_database vbskb_async vbskb_fetch vbskb_asyncfetch
Lasciate ogni speranza, voi ch'entrate.