异步地执行一个SQL语句该怎么做?
有一条SQL语句会占用挺长的时间,我想异步地执行它,这样就可以响应界面,使程序不会失去响应.下面是我的程序,WillExecute和ExecuteComplete都会执行,
但是cn2.Execute这句是阻塞的,跟不用异步没什么区别啊.
Dim WithEvents cn2 As ADODB.Connection
Dim bEnd as BooleanPrivate Sub Command1_Click()
Set cn2 = New ADODB.Connection
cn2.Open ""cn2.Execute "delete from tablea where flag=1"do while not bEnd
    Sleep(500)
    doEvents
loopcn2.close
End SubPrivate Sub cn2_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)
        bend = True
End Sub
  
Private Sub cn2_WillExecute(Source As String, CursorType As ADODB.CursorTypeEnum, LockType As ADODB.LockTypeEnum, Options As Long, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
        bend = False
End Sub

解决方案 »

  1.   


    很奇怪,这句如果这样写的话
    cn2.Execute "delete from tablea where flag=1",,adAsyncExecute这部操作是异步的了,但是cn2_ExecuteComplete和cn2_WillExecute,这两个过程不会执行,不知道异步的操作什么时候会执行完,郁闷.
      

  2.   

    找到答案了.cn2.Execute "delete from tablea where flag=1",,adAsyncExecute
    这句是对的,在等待完成的循环中必须有DoEvents,不然的话,执行结束的事件不会被响应,也就是说DoEvents的时候,cn2_ExecuteComplete才会执行.