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
コメント