一个绝好的例子,来自MSDN
Option ExplicitPrivate WithEvents adoCn As ADODB.Connection
Private WithEvents adoRs As ADODB.Recordset
Private adoErr As ErrorsPrivate Sub Form_Load()Dim strConnect As String
strConnect = "Driver={SQL Server};Server=<ServerName>;User ID=<UserID>;Password=<Password>;Initial Catalog=<Database>"Set adoCn = New ADODB.Connection
With adoCn
    '.Provider = "SQLOLEDB"
    .ConnectionString = strConnect
    .Open
End WithSet adoRs = New ADODB.Recordset
With adoRs
    Set .ActiveConnection = adoCn
    '.CursorLocation = adUseServer 'adUseClient
    .CursorLocation = adUseClient    .CursorType = adOpenStatic
    .LockType = adLockReadOnly
    .Open "SELECT * FROM adoAsyncTest", , , , (adCmdText + adAsyncFetchNonBlocking)
End WithDebug.Print "Executing Async..."End SubPrivate Sub adoCn_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)Debug.Print "---------Execute Complete---------"
Debug.Print "RecordCount = " & adoRs.RecordCountEnd SubPrivate Sub adoRs_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)Debug.Print "---------Fetch Complete---------"End SubPrivate Sub adoRs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)Debug.Print "Fetch Progress = " & pRecordset.RecordCountEnd Sub