レコード追加時のエラー処理・トランザクションの使用方法:ExcelでADO

ExcelからADOでAccessデータベースに、一度に多くのレコードを登録する時、途中でエラーが発生すると大変です。

この場合の対処方法にトランザクションがあります。

トランザクションとは、一連の実行を一括に処理する方法で、もし途中でエラーが発生しても、全て処理をキャンセルできます。

■ トランザクションの流れ

BeginTrans : 処理前に実行
CommitTrans : 正常終了の場合、変更を保存しトランザクションを終了します。
RollbackTrans : 変更をキャンセルしトランザクションを終了します。

Homeに戻る > Excel データベースのTipsへ



ExcelからADOでトランザクションを使用した実行画面

売上管理テーブルを使用しました。

Accessで売上テーブルを開いた画面です。
レコードが1件登録されています。
売上げデータ

AddNew ~ Update を5回実行し、6回目に無理にエラーを発生させます。
トランザクションを使用しなければ、この時点で5件のレコードが追加されているはずです。

6回目にエラーを発生させた画面です。
エラーが発生したExcel画面

トランザクション処理をしているので、5件のレコードが追加されているはずですが、開始前と同じのままです。
エラー処理部分のRollbackTransでキャンセルされたからです。
エラー処理した画面

コード

Option Explicit

Private Sub CommandButton1_Click()
    Dim db As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim i As Integer
    
On Error GoTo ErrRtn
    '売上管理のACCDBファイルに接続します
    Set db = New ADODB.Connection
    db.Provider = "Microsoft.Ace.OLEDB.12.0"
    db.Open "C:\MyHP\excel2007\Tips\売上管理.accdb"

    'レコードセットを開きます
    Set rs = New ADODB.Recordset
    '売上テーブルを開きます
    rs.Open "T_売上", db, adOpenDynamic, adLockOptimistic
    
    'トランザクションの開始
    db.BeginTrans
    
    For i = 1 To 10
        '追加開始
        rs.AddNew
        rs("日付") = "2010/06/28"
        rs("会社名") = "株式会社早急運送"
        rs("商品名") = "スチール棚"
        rs("数量") = 500
        rs("金額") = 4950000
        '無理やりエラーを発生させる
        rs("備考") = "No." & 2 / (i - 6)
        '保存
        rs.Update
    Next
    
    'トランザクションの保存
    db.CommitTrans
    
    '閉じる
    rs.Close
    db.Close
    '終了処理
    Set rs = Nothing
    Set db = Nothing
    Exit Sub

ErrRtn:
    MsgBox "エラー: " & Err.Description
    'BeginTransの時点まで戻り、変更をキャンセルする
    db.RollbackTrans
    db.Close
    Set db = Nothing
End Sub

Homeに戻る > Excel データベースのTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved