プロバイダー エラー
適用先: Access 2013、Office 2013
プロバイダー エラーが発生すると、実行時エラー -2147467259 が返されます。 このエラーを受け取った場合は、アクティブな Connection オブジェクトの、処理の内容を表す 1 つ以上のエラーが含まれる Errors コレクションを調べます。
ADO Errors コレクション
特定の ADO 操作により複数のプロバイダー エラーが発生する可能性があるため、ADO では、 Connection オブジェクト経由でエラー オブジェクトのコレクションを公開しています。 操作が正常に完了した場合、このコレクションにはオブジェクトは格納されず、なんらかの問題が生じ、プロバイダーで 1 つ以上のエラーが発生した場合は、このコレクションに 1 つ以上の Error オブジェクトが格納されます。 エラーの正確な原因を突き止めるには、各エラー オブジェクトを個別に調べる必要があります。
発生したエラーの処理が完了したら、 Clear メソッドを呼び出してコレクションの内容を消去できます。 Recordset オブジェクトの Resync 、 UpdateBatch 、または CancelBatch の各メソッドの呼び出し、 Connection オブジェクトの Open メソッドの呼び出し、あるいは Recordset オブジェクトの Filter プロパティの設定を行う前に、 Errors コレクションの内容を明示的に消去することは特に重要です。 コレクションを明示的に消去することで、以前の操作による Error オブジェクトがコレクションに残っていないことを確認できます。
エラー以外に警告を生成する操作もあります。 警告も、 Error コレクションの Errors オブジェクトによって表されます。 プロバイダーが警告をコレクションに追加する場合は、実行時エラーは生成されません。 特定の操作によって警告が生成されたかどうかを確認するには、 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
エラー処理ルーチンでは、 For Each ループで Errors コレクション内の各オブジェクトを調べます。 この例では、単に表示用のメッセージを蓄積しています。 実際のプログラムでは、開いているすべてのファイルを閉じ、プログラムを正しい順序で停止するなど、各エラーに合わせて適切なタスクを実行するコードを記述します。
Error オブジェクト
Error オブジェクトを調べると、発生したエラーの種類を特定し、さらにエラーの原因になったアプリケーションまたはオブジェクトを特定できます。 Error オブジェクトのプロパティは、次のとおりです。
プロパティ名 |
説明 |
---|---|
説明 |
発生したエラーを説明するテキストです。 |
HelpContext、HelpFile |
発生したエラーの説明を含むヘルプ トピックとヘルプ ファイルを示します。 |
NativeError |
プロバイダー固有のエラー番号です。 |
数値 |
発生したエラーに対応する ErrorValueEnum の番号を表す長整数です。 |
Source |
エラーが生じたオブジェクトまたはアプリケーションの名前を示します。 |
Sqlstate |
プロバイダーが SQL ステートメントの処理中に返す 5 桁のエラー コードです。 |
ADO Error オブジェクトは、標準の Visual Basic Err オブジェクトによく似ています。 発生したエラーの情報は、プロパティによって表されます。 エラーの番号以外に、2 種類の関連情報も返されます。 NativeError プロパティには、使用しているプロバイダーに固有のエラー番号が格納されます。 前の例では、プロバイダーは Microsoft OLE DB Provider for SQL Server であるため、 NativeError には SQL Server に固有のエラーが格納されます。 SQLState プロパティには、SQL ステートメント内のエラーを示す 5 桁のコードが設定されます。
イベント関連エラー
Error オブジェクトは、イベント関連エラーが発生した場合にも使用されます。 イベント パラメーターとして渡される Error オブジェクトを調べることで、ADO イベントを発生させたプロセスでエラーが発生したかどうかを判断できます。
イベントを発生させた操作が正常に終了すると、イベント ハンドラーの adStatus パラメーターが adStatusOK に設定されます。 一方、イベントを発生させた操作が失敗すると、adStatus パラメーターは adStatusErrorsOccurred に設定されます。 この場合は、エラーを表す Error オブジェクトが pError パラメーターに格納されます。