ExecuteComplete ADODB连接事件未触发adAsyncExecute参数

问题描述:

我试图捕获一个存储过程异步完成的问题。ExecuteComplete ADODB连接事件未触发adAsyncExecute参数

下面我的代码VBA(在名为clsAsync类模块):

Option Explicit 

Private WithEvents cnn As ADODB.Connection 


Private Sub cnn_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) 
    MsgBox "Execution completed" 
End Sub 

Sub execSPAsync() 
    Set cnn = New ADODB.Connection 
    Set rst = New ADODB.Recordset 
    cnn.ConnectionString = "connection to my database SQLSEREVER" 
    cnn.Open 
    cnn.Execute "kp.sp_WaitFor", adExecuteNoRecords, adAsyncExecute 
End Sub 

这个类是PublicNotCreatable。

拨叫我用下面的代码模块子execSPAsync:

Sub testASYNC() 
    Dim a As New clsAsync 
    Call a.execSPAsync 
End Sub 

存储过程是非常简单的:

alter PROC kp.sp_WaitFor 
AS 

WAITFOR DELAY '00:00:05' 

我的问题是,该事件ExcuteComplete在不以解雇所有,而如果我评论adAsynExecute参数一切工作正常。 关于如何解决我的问题的任何想法?

+0

在您选择对象后,您是否在右边列出了所有事件,在您的案例中是cnn? – glh 2013-04-23 11:12:40

+0

如果处理'WillExecute'事件,你会得到什么?这是否弹出消息框?另外,您可能需要查看'FetchComplete'事件,因为这是在检索大型异步集时使用的。 – glh 2013-04-23 11:35:01

+0

@glh:如果我处理一个新事件WillExecute,这个新事件会正确启动。 – stexcec 2013-04-23 12:25:39

我解决我的问题更换调用代码:这个新的代码

Sub testASYNC() 
    Dim a As New clsAsync 
    Call a.execSPAsync 
End Sub 

Private a As clsAsync 

Sub testASYNC() 
    Set a = New clsAsync 
    Call a.execSPAsync 
End Sub 

在异步模式下,对象“A”不再可用,在结束程序(范围可视性问题)。

+0

+1太棒了,我可以使用它! – glh 2013-04-23 13:03:56