【EXCEL VBA】ADOによるExcelとAccess2010との連携サンプル トランザクション処理、エラー処理考慮版

MSDNや、Accessのヘルプを参考にトランザクション、エラー処理を実装したExcelとAccess2010との連携サンプル

Option Explicit

Sub test()
    
    On Error GoTo EXCEPTION
    Dim conn As ADODB.Connection 'Microsoft ActiveX Data Objects 6.0 Libraryの参照設定要
    Set conn = New ADODB.Connection
    Dim dbRes As New ADODB.Recordset
    Dim str As String
    Dim IsTransaction As Boolean: IsTransaction = False  'トランザクションの開始有無
    '初期化
    Err.Clear
    conn.Errors.Clear
    
    str = "C:\サンプル\Database2.accdb"
    With conn
        .Provider = "Microsoft.ACE.OLEDB.12.0" 'access 2010
        .ConnectionString = "Data Source=" & str
        '排他関連(トランザクションを利用するためここでは特に何もしない)
        .IsolationLevel = adXactReadCommitted '1 つのトランザクションから、他のトランザクションで行われた変更を参照できるが、参照できるのはその変更のコミット後であることを示します。
        .Mode = adModeShareDenyNone '権限の種類に関係なく、他のユーザーが接続を開けるようにします。他のユーザーに対して、読み取りと書き込みの両方のアクセスを許可します。
        .Open
        Debug.Print .ConnectionString
    End With
    
    'トランザクション開始
    conn.BeginTrans
    IsTransaction = True
    '処理
    Dim strSQL As String
    strSQL = "SELECT * FROM サンプルテーブル"
    Set dbRes = conn.Execute(strSQL)
    Debug.Print dbRes(1).Name

    'コミット
    conn.CommitTrans
    
    'クリーンナップ
    dbRes.Close
    conn.Close
    Set conn = Nothing
Exit Sub
EXCEPTION:
    'エラー処理
    Dim msgstr As String
    If conn.Errors.Count > 0 Then
        Dim errCurrent As ADODB.Error
        For Each errCurrent In conn.Errors
            msgstr = msgstr & errCurrent.Description & vbCr
            msgstr = msgstr & "SQLSTATE: " & errCurrent.SqlState & vbCr
        Next
        conn.Errors.Clear
    Else
        msgstr = msgstr & Err.Description
        Err.Clear
    End If
    If IsTransaction = True Then
        conn.RollbackTrans
    End If
    If Not dbRes Is Nothing Then
        If dbRes.State = adStateOpen Then dbRes.Close
    End If
    Set dbRes = Nothing
    If Not conn Is Nothing Then
        If conn.State = adStateOpen Then conn.Close
    End If
    Set conn = Nothing
    MsgBox msgstr, , "Error"
End Sub

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました