ADO エラー
適用先: Access 2013、Office 2013
ADO エラーは、実行時エラーとしてプログラムに報告されます。 使用しているプログラミング言語のエラー トラッピング機構を使用すると、これらのエラーをトラッピングして処理できます。 たとえば、Visual Basic では、 On Error ステートメントを使用します。 Visual J++ では、 try-catch ブロックを使用します。 Visual C++ では、ADO ライブラリへのアクセス方法によって操作が異なります。 #import を使用している場合は、 try-catch ブロックを使用します。 それ以外の場合は、 GetErrorInfo を呼び出すことによって、明示的にエラー オブジェクトを取得する必要があります。 次の Visual Basic の sub プロシージャでは、ADO エラーをトラッピングする方法を示します。
' BeginErrorHandlingVB01
Private Sub Form_Load()
' Turn on error handling
On Error GoTo FormLoadError
'Open the database and the recordset for processing.
'
Dim strCnn As String
strCnn = "Provider='sqloledb';" & _
"Data Source='MySqlServer';" & _
"Initial Catalog='Northwind';Integrated Security='SSPI';"
' cnn is a Public Connection Object because
' it was defined WithEvents
Set cnn = New ADODB.Connection
cnn.Open strCnn
' The next line of code intentionally causes
' an error by trying to open a connection
' that has already been opened.
cnn.Open strCnn
' rst is a Public Recordset because it
' was defined WithEvents
Set rst = New ADODB.Recordset
rst.Open "Customers", cnn
Exit Sub
' Error handler
FormLoadError:
Dim strErr As String
Select Case Err
Case adErrObjectOpen
strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
strErr = strErr & "Error reported by: " & Err.Source & vbCrLf
strErr = strErr & "Help File: " & Err.HelpFile & vbCrLf
strErr = strErr & "Topic ID: " & Err.HelpContext
MsgBox strErr
Debug.Print strErr
Err.Clear
Resume Next
' If some other error occurs that
' has nothing to do with ADO, show
' the number and description and exit.
Case Else
strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
MsgBox strErr
Debug.Print strErr
Unload Me
End Select
End Sub
' EndErrorHandlingVB01
この Form_Load イベント プロシージャは、同じ Connection オブジェクトを 2 回開こうとすることにより、意図的にエラーを発生させます。 Open メソッドが 2 度目に呼び出されたときに、エラー ハンドラーが起動されます。 この場合、エラーの種類は adErrObjectOpen であるため、プログラムの実行が再開される前に、エラー ハンドラーによって次のメッセージが表示されます。
Error #3705: Operation is not allowed when the object is open.
Error reported by: ADODB.Connection
Help File: E:\WINNT\HELP\ADO260.CHM Topic ID: 1003705
エラー メッセージには、ここでは適用されない LastDLLError 値を除き、Visual Basic Err オブジェクトによって提供される各情報が含まれます。 エラー番号は、発生したエラーを示します。 この説明は、エラーを自分で処理したくない場合に便利です。 ユーザーに渡すことができます。 通常、アプリケーション用にカスタマイズされたメッセージを使用する必要がありますが、すべてのエラーを予測することはできません。説明は、何が間違っていたかについていくつかの手がかりを与えます。 サンプル コードでは、 エラーは Connection オブジェクトによって報告されました。 オブジェクトの型またはプログラム ID は、変数名ではなく、ここに表示されます。
注:
[!メモ] Visual Basic の Err オブジェクトには、最新のエラーに関する情報のみが格納されます。 Connection オブジェクトの ADO の Errors コレクションには、直近の ADO 操作によって発生したエラー 1 つにつき 1 つの Error オブジェクトが含まれています。 複数のエラーを処理するときは、 Err オブジェクトの代わりに Errors コレクションを使用します。 Errors コレクションの詳細については、「 プロバイダー エラー」を参照してください。 ただし、有効な Connection オブジェクトがない場合は、 Err オブジェクトが ADO エラーに関する唯一の情報源です。
ADO エラーを発生させる可能性が高い操作とはどのようなものでしょうか。 よくある ADO エラーは、 Connection や Recordset などのオブジェクトを開いたときや、データを更新しようとしたとき、プロバイダーがサポートしていないメソッドまたはプロパティを呼び出したときに発生するものです。
OLE DB エラーも、 Errors コレクションで実行時エラーとしてアプリケーションに渡すことができます。 OLE DB のエラー番号の詳細については、「OLE DB Programmer's ReferenceOLE DB Programmer's Reference」 (英語) の Chapter 16 を参照してください。