事件參數
每個事件處理程式都有一個控制事件處理程式的狀態參數。 針對 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 參數,可提供事件發生原因的其他資訊。 例如,WillMove 和 MoveComplete 事件可能會因為任一導覽方法(MoveNext、MovePrevious等等)被呼叫或因重新查詢而發生。
Status 參數
呼叫事件處理程式例程時,Status 參數會設定為下列其中一個值。
價值 | 描述 |
---|---|
adStatusOK | 傳遞至 Will 和 Complete 事件。 這個值表示導致事件成功完成的作業。 |
廣告狀態錯誤已發生 | 僅適用於完成事件。 這個值表示造成事件的作業失敗,或Will事件取消作業。 如需詳細資訊,請參閱 錯誤 參數。 |
adStatusCantDeny | 僅限傳遞至Will事件。 這個值表示Will事件無法取消作業。 必須執行。 |
如果您在Will事件中判斷作業應該繼續,請將 Status 參數維持不變。 不過,只要傳入的狀態參數未設定為 adStatusCantDeny,您仍然可以透過將 狀態 變更為 adStatusCancel來取消待處理的操作。 當您這樣做時,與作業相關聯的 Complete 事件會將其 Status 參數設定為 adStatusErrorsOccurred。 傳遞至 Complete 事件的 Error 物件將包含 adErrOperationCancelled 的值。
如果您不想再處理事件,您可以將 Status 設定為 adStatusUnwantedEvent,而且您的應用程式將不再收到該事件的通知。 不過,請記住,某些事件可能會因為多個原因而引發。 在此情況下,您必須為每個可能的原因指定 adStatusUnwantedEvent。 例如,若要停止接收暫止 RecordChange 事件的通知,您必須將 Status 參數設定為 adStatusUnwantedEvent,以對應於 adRsnAddNew、adRsnDelete、adRsnUpdate、adRsnUndoUpdate、adRsnUndoAddNew、adRsnUndoDelete,以及 adRsnFirstChange 事件。
價值 | 描述 |
---|---|
adStatusUnwantedEvent | 要求此事件處理程式不會收到任何進一步通知。 |
adStatusCancel | 要求取消即將發生的作業。 |
錯誤參數
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 事件實例化
事件處理程式如何搭配運作
事件類型