MSDNや、Accessのヘルプを参考にトランザクション、エラー処理を実装したExcelとAccess2010との連携サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
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 |
コメント