プロバイダー エラー
プロバイダー エラーが発生すると、-2147467259 の実行時エラーが返されます。 このエラーが発生した場合は、アクティブな Connection オブジェクトの Errors コレクションを調べます。それには、発生した内容を説明する 1 つ以上のエラーが含まれます。
ADO の Errors コレクション
特定の ADO 操作によって複数のプロバイダー エラーが発生する可能性があるため、ADO では Connection オブジェクトを介してエラー オブジェクトのコレクションが公開されます。 このコレクションには、操作が正常に終了した場合はオブジェクトは含まれず、問題が発生し、プロバイダーが 1 つ以上のエラーを生成した場合は、1 つ以上の Error オブジェクトが含まれます。 各エラー オブジェクトを調べて、エラーの正確な原因を特定します。
発生したエラーの処理が完了したらすぐに、Clear メソッドを呼び出してコレクションをクリアできます。 Recordset オブジェクトの Resync、UpdateBatch、または CancelBatch メソッドを呼び出す前、Connection オブジェクトの Open メソッドを呼び出す前、または Recordset オブジェクトの Filter プロパティを設定する前に、Errors コレクションを明示的にクリアすることが特に重要です。 コレクションを明示的にクリアすることで、確実に前の操作のすべての 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 オブジェクトを調べることで、発生したエラーや、さらに重要なこととして、エラーの原因となったアプリケーションまたはオブジェクトを特定できます。 Error オブジェクトには、次のプロパティがあります。
プロパティ名 | 説明 |
---|---|
説明 | 発生したエラーの説明テキスト。 |
HelpContext、HelpFile | 発生したエラーの説明を含むヘルプ トピックとヘルプ ファイルを参照します。 |
NativeError | プロバイダー固有のエラー番号。 |
番号 | 発生したエラーの番号 (ErrorValueEnum に列挙されているもの) を表す Long Integer。 |
ソース | エラーを生成したオブジェクトまたはアプリケーションの名前を示します。 |
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 に設定されます。 その場合、pError パラメーターには、エラーを説明する Error オブジェクトが含まれます。