次の方法で共有


プロバイダー エラー

プロバイダー エラーが発生すると、-2147467259 の実行時エラーが返されます。 このエラーが発生した場合は、アクティブな Connection オブジェクトの Errors コレクションを確認します。これには、発生した内容を説明する 1 つ以上のエラーが含まれます。

ADO Errors コレクション

特定の ADO 操作で複数のプロバイダー エラーが発生する可能性があるため、ADO は、Connection オブジェクトを介してエラー オブジェクトのコレクションを公開します。 操作が正常に終了した場合、このコレクションにはオブジェクトは含まれませんが、問題が発生してプロバイダーによって1つ以上のエラーが発生した場合には、1つ以上の Error オブジェクトが含まれます。 各エラー オブジェクトを調べて、エラーの正確な原因を特定します。

発生したエラーの処理が完了したら、Clear メソッドを呼び出してコレクションをクリアできます。 Recordset オブジェクトで ResyncUpdateBatchまたは CancelBatch メソッドを呼び出す前に、Errors コレクションを明示的にクリアすることが特に重要です。 Connection オブジェクトの Open メソッドを使用するか、Recordset オブジェクトに Filter プロパティを設定します。 コレクションを明示的にクリアすることで、コレクション内の Error オブジェクトが以前の操作から残されていないことを確認できます。

一部の操作では、エラーに加えて警告が生成される場合があります。 警告は、Errors コレクション内の Error オブジェクトによっても表されます。 プロバイダーがコレクションに警告を追加しても、実行時エラーは生成されません。 Errors コレクションの Count プロパティを調べて、特定の操作によって警告が生成されたかどうかを確認します。 カウントが 1 つ以上の場合は、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  

エラー処理ルーチンには、Errors コレクション内の各オブジェクトを調べる For Each ループが含まれています。 この例では、表示用のメッセージが蓄積されます。 作業プログラムでは、開いているすべてのファイルを閉じてプログラムを順番にシャットダウンするなど、エラーごとに適切なタスクを実行するコードを記述します。

エラーオブジェクト

Error オブジェクトを調べることで、発生したエラー、さらに重要なアプリケーション、エラーの原因となったオブジェクトを特定できます。 Error オブジェクトには、次のプロパティがあります。

プロパティ名 説明
説明 発生したエラーのテキストの説明。
HelpContext、HelpFile 発生したエラーの説明を含むヘルプ トピックとヘルプ ファイルを参照します。
NativeError プロバイダー固有のエラー番号。
数値 発生したエラーの番号 (ErrorValueEnumに記載されている) を表す長整数。
ソース エラーを生成したオブジェクトまたはアプリケーションの名前を示します。
SQLState SQL ステートメントの処理中にプロバイダーが返す 5 文字のエラー コード。

ADO Error オブジェクトは、標準の Visual Basic Err オブジェクトによく似ています。 そのプロパティは、発生したエラーを記述します。 エラーの数に加えて、2 つの関連する情報も受け取ります。 NativeError プロパティには、使用しているプロバイダーに固有のエラー番号が含まれています。 前の例では、プロバイダーは Microsoft OLE DB Provider for SQL Server であるため、NativeError には SQL Server 固有のエラーが含まれます。 SQLState プロパティには、SQL ステートメントのエラーを記述する 5 文字のコードがあります。

Error オブジェクトは、イベント関連のエラーが発生したときにも使用されます。 ADO イベントを発生させたプロセスでエラーが発生したかどうかを確認するには、イベント パラメーターとして渡された Error オブジェクトを確認します。

イベントを発生させる操作が正常に終了すると、イベント ハンドラーの adStatus パラメーターが adStatusOK に設定されます。 一方、イベントを発生させた操作が失敗した場合、adStatus パラメーターは adStatusErrorsOccurred に設定されます。 その場合、pError パラメーターには、エラーを説明する Error オブジェクトが含まれます。