たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_ADOの利用_【Error】【Connection】エラー情報の取得

ConnectionオブジェクトのErrorsプロパティでエラー内容を取得

Errorに関する情報を取得するには

データベースプロバイダで発生したエラーに関する情報はErrorオブジェクトに格納されるので
アクセスの際に発生したエラーを確認するにはErrorsコレクションの各プロパティを参照するとよい

プロパティ

Number:エラー番号を返す
Description:エラー内容を返す
Source:エラーを起こしたオブジェクトを返す

何を行うか

エラーが出るような処置をあえて行い、エラー発生時用に準備した処理を行う

プロパティ参照時の書式例

Dim エラー用オブジェクト変数 As ADODB.Error
~~
On Error GoTo 行ラベル ※「ErrExit」という単語じゃなくてもよい
処理
行ラベル :
 For Each エラー用オブジェクト変数 In Connectionオブジェクト変数.Errors
  処理
 Next


記述例における利用パーツ

ステートメント
  →On Error GoTo / For Each
・プロパティ
  →Number / Description / Source
・メソッド
  →AddNew / Update / Open / Close

【実践】エラー発生時にその内容を確認するための記述例

カレントプロジェクトのデータベースに接続する場合の記述
敢えて重複なしインデックスのフィールドに重複レコードを追加することでエラーを起こし
エラー番号・エラー内容・エラーを起こしたオブジェクトを、イミディエイトウィンドウに表示

▼操作対象テーブル「飲料リスト」▼


▼記述例▼

Sub MakeError()

Dim CNT As ADODB.connection
Dim RST As ADODB.Recordset
Dim ErrInfo As ADODB.Error

Set CNT = CurrentProject.connection
Set RST = New ADODB.Recordset

RST.Open "飲料リスト", CNT, adOpenKeyset, adLockOptimistic
On Error GoTo ErrLabel

RST.AddNew
RST("通し番号") = "AA04"
RST("品目") = "ジャスミン茶"
RST.Update

Exit Sub

ErrLabel:
    For Each ErrInfo In CNT.Errors
        Debug.Print ErrInfo.Number & vbCrLf & ErrInfo.Description & vbCrLf & ErrInfo.Source
    Next
End Sub



▼実行結果▼