ADO 実行時エラー

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 オブジェクトがない場合は、ERR オブジェクトが ADO エラーに関する唯一の情報ソースです。

ADO エラーを引き起こす可能性のある操作の種類は何でしょうか。 一般的な ADO エラーでは、ConnectionRecordset などのオブジェクトを開くこと、データの更新、プロバイダーでサポートされていないメソッドまたはプロパティの呼び出しが含まれる場合があります。

OLE DB エラーは、Errors コレクションの実行時エラーとしてアプリケーションに渡すこともできます。

次のトピックでは、ADO エラーの詳細について説明します。