事件參數
每個事件處理常式都有一個控制事件處理常式的狀態參數。 針對 Complete 事件,此參數也可用來指出產生事件的作業成功或失敗。 大部分的 Complete 事件也有錯誤參數,可提供可能發生的任何錯誤相關資訊,以及參考用來執行作業之 ADO 物件的一或多個物件參數。 例如,ExecuteComplete 事件包含與事件相關聯的 Command、Recordset 和 Connection 物件的物件參數。 在下列 Visual Basic 範例中,您可以看到 pCommand、pRecordset 和 pConnection 物件,這些物件代表 Execute 方法所使用的 Command、Recordset 和 Connection 物件。
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 事件。 這個值表示導致事件順利完成的作業。 |
adStatusErrorsOccurred | 僅傳遞至 Complete 事件。 這個值表示造成事件失敗的作業,或 Will 事件取消作業。 如需詳細資訊,請查看 Error 參數。 |
adStatusCantDeny | 僅傳遞至 Will 事件。 這個值表示 Will 事件無法取消作業。 必須執行。 |
如果您在 Will 事件中判斷作業應該繼續,請將 Status 參數保留不變。 不過,只要傳入狀態參數未設定為 adStatusCantDeny,您就可以將 Status 變更為 adStatusCancel 來取消暫止的作業。 當您這樣做時,與作業相關聯的 Complete 事件已將其 Status 參數設定為 adStatusErrorsOccurred。 傳遞至 Complete 事件的 Error 物件將會包含 adErrOperationCancelled 值。
如果您不想再處理事件,您可以將 Status 設定為 adStatusUnwantedEvent,您的應用程式不會再收到該事件的通知。 不過,請記住,某些事件可能會因為多個原因而引發。 在此情況下,您必須為每個可能的原因指定 adStatusUnwantedEvent。 例如,若要停止接收暫止 RecordChange 事件的通知,您必須針對 adRsnAddNew、adRsnDelete、adRsnUpdate、adRsnUndoUpdate、adRsnUndoAddNew、adRsnUndoDelete 和 adRsnFirstChange 在其發生時,將 Status 參數設定為 adStatusUnwantedEvent。
值 | 描述 |
---|---|
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 參數的事件處理常式停止接收事件通知。