ADO Run-Time エラー
ADO エラーは、実行時エラーとしてプログラムに報告されます。 プログラミング言語のエラー トラップ メカニズムを使用して、それらをトラップして処理できます。 たとえば、Visual Basic では、On Error ステートメントを使用します。 Visual C++ では、ADO ライブラリへのアクセスに使用するメソッドによって異なります。 #import では、try-catch ブロックを使用します。 それ以外の場合、C++ プログラマは、GetErrorInfo 呼び出してエラー オブジェクトを明示的に取得する必要があります。 次の Visual Basic サブプロシージャは、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=a-iresmi2000;" & _
"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 つの Error オブジェクトが含まれています。 複数のエラーを処理するには、Err オブジェクトではなく、Errors コレクションを使用します。 Errors コレクションの詳細については、「プロバイダー エラー」を参照してください。 ただし、有効な Connection オブジェクトがない場合は、ADO エラーに関する情報の唯一のソース Err オブジェクトです。
ADO エラーを引き起こす可能性がある操作の種類 一般的な ADO エラーには、Connection や Recordsetなどのオブジェクトを開いたり、データを更新しようとしたり、プロバイダーでサポートされていないメソッドやプロパティを呼び出したりすることがあります。
OLE DB エラーは、Errors コレクションの実行時エラーとしてアプリケーションに渡すこともできます。
次のトピックでは、ADO エラーの詳細について説明します。