提供者錯誤

發生提供者錯誤時,會傳回 -2147467259 的執行階段錯誤。 收到此錯誤時,請檢查使用中 Connection 物件的 Errors 集合,其會包含一或多個描述所發生情況的錯誤。

ADO 錯誤集合

因為特定 ADO 作業可能會產生多個提供者錯誤,ADO 會透過 Connection 物件公開錯誤物件的集合。 如果作業成功完成,此集合不會有任何物件,而如果發生錯誤,且提供者引發一或多個錯誤,則會包含一或多個 Error 物件。 檢查每個錯誤物件,以判斷錯誤的確切原因。

一旦您完成處理發生的任何錯誤,就可以呼叫 Clear 方法來清除集合。 請務必先明確清除 Errors 集合,再呼叫 Recordset 物件上的 ResyncUpdateBatchCancelBatch 方法、Connection 物件上的 Open 方法,或設定 Recordset 物件上的 Filter 屬性。 藉由明確清除集合,您可以確定集合中的任何 Error 物件都不會離留在先前的作業中。

某些作業除了錯誤之外,還可以產生警告。 警告也會由 Errors 集合中的 Error 物件呈現。 當提供者將警告新增至集合時,它不會產生執行階段錯誤。 檢查 Errors 集合的 Count 屬性,以判斷特定作業是否產生警告。 如果計數為一或更大,則 Error 物件已新增至集合。 一旦您判斷 Errors 集合包含錯誤或警告,您就可以逐一查看集合,並擷取其包含的每個 Error 物件的相關資訊。 下列簡短的 Visual Basic 範例會示範這點:

' BeginErrorHandlingVB02  
Private Function DeleteCustomer(ByVal CompanyName As String) As Long  
    On Error GoTo DeleteCustomerError  
  
    rst.Find "CompanyName='" & CompanyName & "'"  
DeleteCustomerError:  
Dim objError As ADODB.Error  
Dim strError As String  
  
    If cnn.Errors.Count > 0 Then  
        For Each objError In cnn.Errors  
            strError = strError & "Error #" & objError.Number & _  
                " " & objError.Description & vbCrLf & _  
                "NativeError: " & objError.NativeError & vbCrLf & _  
                "SQLState: " & objError.SQLState & vbCrLf & _  
                "Reported by: " & objError.Source & vbCrLf & _  
                "Help file: " & objError.HelpFile & vbCrLf & _  
                "Help Context ID: " & objError.HelpContext  
        Next  
        MsgBox strError  
    End If  
End Function  
' EndErrorHandlingVB02  

錯誤處理常式包含 For Each 迴圈,可檢查 Errors 集合中的每個物件。 在此範例中,它會累積要顯示的訊息。 在工作程式中,您會撰寫程式碼以針對每個錯誤執行適當的工作,例如關閉所有開啟的檔案,並循序關閉程式。

Error 物件

藉由檢查 Error 物件,您可以判斷發生什麼錯誤,而且更重要的是,哪些應用程式或哪些物件造成錯誤。 Error 物件具有下列屬性:

屬性名稱 描述
說明 所發生錯誤的文字描述。
HelpContext、HelpFile 請參閱說明主題和說明檔,其中包含所發生錯誤的描述。
NativeError 提供者特定的錯誤號碼。
Number 長整數,表示發生錯誤的數目 (列於 ErrorValueEnum)。
來源 指出產生錯誤的物件或應用程式的名稱。
SQLState 提供者在 SQL 陳述式程序期間傳回的五個字元錯誤碼。

ADO Error 物件與標準 Visual Basic Err 物件非常類似。 其屬性描述發生的錯誤。 除了錯誤數目之外,您也會收到兩個相關的資訊片段。 NativeError 屬性包含您使用的提供者的特定錯誤號碼。 在上一個範例中,提供者是 Microsoft OLE DB Provider for SQL Server,因此 NativeError 將包含 SQL Server 特定的錯誤。 SQLState 屬性有五個字母的代碼,可描述 SQL 陳述式中的錯誤。

發生事件相關錯誤時,也會使用 Error 物件。 您可以檢查傳遞為事件參數的 Error 物件,以判斷引發 ADO 事件的程序中是否發生錯誤。

如果導致事件的作業成功完成,事件處理常式的 adStatus 參數將會設定為 adStatusOK。 另一方面,如果引發事件的作業失敗,adStatus 參數會設定為 adStatusErrorsOccurred。 在此情況下,pError 參數會包含描述錯誤的 Error 物件。