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

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

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

文書情報

記事タイトル
【EXCEL VBA】ADOによるExcelとAccess2010との連携サンプル トランザクション処理、エラー処理考慮版
作成日
更新日
Source URL
https://papanda925.com/?p=477

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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