共用方式為


提供者錯誤

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

ADO 錯誤集合

因為特定的 ADO 作業可能會產生多個提供者錯誤,因此 ADO 會透過 Connection 物件公開錯誤物件的集合。 如果作業順利結束,則此集合不會包含任何物件;如果發生問題,提供者引發了一或多個錯誤,此集合會包含一或多個 錯誤 物件。 檢查每個錯誤物件,以判斷錯誤的確切原因。

一旦您完成處理任何已發生的錯誤,就可以呼叫 Clear 方法清除集合。 在您於 Recordset 物件上呼叫 ResyncUpdateBatchCancelBatch 方法、於 Connection 物件上呼叫 Open 方法,或於 Recordset 物件上設定 Filter 属性之前,明確清除 Errors 集合,這是特別重要的。 藉由明確清除集合,您可以確保集合中的任何 Error 物件都不是先前操作遺留的。

某些作業除了錯誤之外,還會產生警告。 警告也會以 Error 物件在 Errors 集合中表示。 當提供者將警告新增至集合時,它不會產生運行時錯誤。 檢查 Errors 集合的 Count 屬性,以判斷特定作業是否產生警告。 如果計數是一或多個,錯誤 物件已新增至集合。 一旦判斷 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 物件具有下列屬性:

屬性名稱 描述
描述 錯誤發生時的文字描述。
HelpContext、HelpFile 請參閱說明主題和說明檔案,其中包含所發生錯誤的描述。
NativeError 提供者特定的錯誤號碼。
代表 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 物件。