事件参数
每个事件处理程序都有一个控制事件处理程序的状态参数。 对于 Complete 事件,此参数还用于指示生成事件的操作的成功或失败。 大多数 Complete 事件还有一个错误参数,用于提供有关可能发生的任何错误的信息,以及一个或多个引用用于执行操作的 ADO 对象的对象参数。 例如,ExecuteComplete 事件包括与事件关联的 Command、Recordset和 Connection 对象的对象参数。 在以下 Visual Basic 示例中,可以看到 pCommand、pRecordset 和 pConnection 对象,这些对象表示 Command、Recordset和 Connection 对象,这些对象由 Execute 方法使用。
Private Sub connEvent_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)
除了 Error 对象之外,相同的参数将传递给 Will 事件。 这样,便可以检查将在挂起操作中使用的每个对象,并确定是否应允许该操作完成。
某些事件处理程序具有 Reason 参数,该参数提供有关事件发生原因的其他信息。 例如,由于调用任一导航方法(MoveNext、MovePrevious等)或查询重新执行,可能会发生WillMove和MoveComplete事件。
状态参数
调用事件处理程序例程时,Status 参数设置为以下值之一。
价值 | 描述 |
---|---|
adStatusOK | 传递给 Will 和 Complete 事件中。 此值表示导致事件成功完成的操作。 |
广告状态错误发生 | 仅适用于“完成”事件的传递。 此值表示导致事件的操作失败,或者 Will 事件取消了该操作。 有关更多详细信息,请查看 错误 参数。 |
adStatusCantDeny | 仅传递给 Will 特定事件。 此值表示 Will 事件无法取消该操作。 必须执行。 |
如果在 Will 事件中确定操作应继续,请将 Status 参数保持不变。 但是,只要传入状态参数未设置为 adStatusCantDeny,您可以通过将 状态 更改为 adStatusCancel来取消挂起的操作。 执行此操作时,关联该操作的 Complete 事件的 Status 参数将被设置为 adStatusErrorsOccurred。 传递给 Complete 事件的 Error 对象将包含值 adErrOperationCancelled。
如果不再想要处理事件,可以将 状态 设置为 adStatusUnwantedEvent,应用程序将不再收到该事件的通知。 但是,请记住,某些事件可能由多个原因引发。 在这种情况下,必须为每个可能的原因指定 adStatusUnwantedEvent。 例如,若要停止接收挂起 RecordChange 事件的通知,必须将 Status 参数设置为 adStatusUnwantedEvent,适用于 adRsnAddNew、adRsnDelete、adRsnUpdate、adRsnUndoUpdate、adRsnUndoAddNew、adRsnUndoDelete,以及 adRsnFirstChange。
价值 | 描述 |
---|---|
adStatusUnwantedEvent | 请求此事件处理程序不再接收通知。 |
广告状态取消 | 请求取消即将发生的操作。 |
错误参数
Error 参数是对 ADO Error 对象的引用。 当 Status 参数设置为 adStatusErrorsOccurred时,Error 对象包含有关操作失败原因的详细信息。 如果与 Complete 事件关联的 Will 事件已通过将 Status 参数设置为 adStatusCancel来取消该操作,则错误对象始终设置为 adErrOperationCancelled。
对象参数
每个事件接收一个或多个对象,这些对象表示操作中涉及的对象。 例如,ExecuteComplete 事件接收 Command 对象、Recordset 对象和 Connection 对象。
Reason 参数
Reason 参数 adReason提供了有关事件发生原因的其他信息。 使用 adReason 参数的事件可以多次调用,即使出于相同的操作,也每次都出于不同的原因。 例如,调用 WillChangeRecord 事件处理程序,以便执行或撤消记录的插入、删除或修改的操作。 如果只想在特定原因发生事件时处理事件,可以使用 adReason 参数来筛选出你不感兴趣的事件。 例如,如果你只想在由于记录被添加而发生更改时处理记录更改事件,可以使用如下所示的方法。
' BeginEventExampleVB01
Private Sub rsTest_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If adReason = adRsnAddNew Then
' Process event
'...
Else
' Cancel event notification for all
' other possible adReason values.
adStatus = adStatusUnwantedEvent
End If
End Sub
' EndEventExampleVB01
在这种情况下,通知有可能因其他原因而发出。 但是,由于每个原因,它只会发生一次。 对于每个原因,当通知已经发生一次后,您将仅会收到有关新记录添加的通知。
相比之下,你只需将 adStatus 设置为 adStatusUnwantedEvent 一次,以请求没有 adReason 参数的事件处理程序停止接收事件通知。
另请参阅
ADO 事件处理程序摘要
语言对 ADO 事件的实例化
事件处理程序如何协同工作
事件类型