【VBA】トランザクション処理の使い方をマスターしよう!

こんにちは!大阪市を拠点に活動している『縁紡ぐ』の稲垣です。

SWELLを使ったホームページ制作や、Excel、ACCESS、RPAなどのシステム開発を行っています。
また、Excel、Word、Outlookの研修や、情報セキュリティ研修も行っています。身近なITの相談相手になりたいと思っています。

お気軽にお問い合わせください。

業務効率化を目指して、VBAで開発し、複数人で同時に使うことがあるなら、知っておくと良いのが、トランザクション処理です。トランザクション処理について詳しく解説します。これを読めば、データの整合性を保ちながら、効率的に処理を行う方法がわかりますよ。さあ、一緒に見ていきましょう!

目次

トランザクション処理とは?

ACCESSでもその他のデータベースを使う場合も、トランザクション処理は重要です。

 

トランザクション処理って、どういうことなのか分からない…

縁紡ぐ

トランザクション処理は、データの整合性を保つための処理だよ!

なぜトランザクションが必要なのか

データベースを扱うとき、特に複数の操作を行う場合、トランザクション処理は必須です。これにより、データの整合性を保ちながら、失敗した場合には元に戻すことができます。

縁紡ぐ

上の場合、1,000円出金して振込を行うときに、振込処理で失敗した場合、残高に1,000円のまま終了します。

複数のテーブルに更新が必要な場合に、どかかで失敗したということね

縁紡ぐ

トランザクション処理がないと、1,000円が行方不明になってしまうんだ。こんな時に、トランザクション処理が役立つんだ!

縁紡ぐ

トランザクション処理があれば、トランザクション開始後に失敗が発生するとトランザクション開始まで戻すことができるんだ!

VBAでのトランザクション処理の実装方法

DAOを使用したトランザクション処理

まずは、DAOを使った方法を見ていきましょう。簡単なコード例を紹介します。

Sub TransactionUsingDAO()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    On Error GoTo ErrorHandler

    ' データベースを開く
    Set db = CurrentDb()

    ' トランザクションの開始
    db.BeginTrans

    ' レコードを追加
    Set rs = db.OpenRecordset("YourTableName")
    rs.AddNew
    rs!YourFieldName = "SomeValue"
    rs.Update

    ' もう一つのレコードを追加
    rs.AddNew
    rs!YourFieldName = "AnotherValue"
    rs.Update

    ' トランザクションのコミット
    db.CommitTrans

    ' クリーンアップ
    rs.Close
    Set rs = Nothing
    Set db = Nothing

    Exit Sub

ErrorHandler:
    ' エラーが発生した場合はロールバック
    db.Rollback
    MsgBox "エラーが発生しました: " & Err.Description
    If Not rs Is Nothing Then rs.Close
    Set rs = Nothing
    Set db = Nothing
End Sub

ADOを使用したトランザクション処理

次に、ADOを使った方法です。こちらもコード例を見てみましょう。

Sub TransactionUsingADO()
    Dim conn As ADODB.Connection
    Dim cmd As ADODB.Command

    On Error GoTo ErrorHandler

    ' ADO接続の初期化
    Set conn = New ADODB.Connection
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=YourDatabase.accdb;"
    conn.Open

    ' トランザクションの開始
    conn.BeginTrans

    ' コマンドオブジェクトの作成
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = conn

    ' レコードを追加
    cmd.CommandText = "INSERT INTO YourTableName (YourFieldName) VALUES ('SomeValue')"
    cmd.Execute

    ' もう一つのレコードを追加
    cmd.CommandText = "INSERT INTO YourTableName (YourFieldName) VALUES ('AnotherValue')"
    cmd.Execute

    ' トランザクションのコミット
    conn.CommitTrans

    ' クリーンアップ
    conn.Close
    Set cmd = Nothing
    Set conn = Nothing

    Exit Sub

ErrorHandler:
    ' エラーが発生した場合はロールバック
    conn.RollbackTrans
    MsgBox "エラーが発生しました: " & Err.Description
    If Not conn Is Nothing Then conn.Close
    Set cmd = Nothing
    Set conn = Nothing
End Sub
縁紡ぐ

このようにコードを書けば、処理中にエラーが発生しても、ロールバックを行い処理がなかったことにしてくれるよ!

まとめ

ロールバック処理は、トランザクション処理の重要な要素です。エラーが発生した場合には必ずロールバックを行うことで、データの整合性を保つことができます。今回の内容を参考にして、ぜひ実践してみてくださいね。

記事を書いた人

稲垣

  • Excel、ACCESSでのシステム開発が得意
  • ITスキルを共有し実践的に学びながら成長する人を見るのが幸せ
  • 自家焙煎するほどのコーヒー好き
  • 使用言語 VBA、Python、Javascript、Java、HTML、CSS etc.
  • 保有資格 Kintoneアソシエイト、日商簿記検定2級、マンション管理士、管理業務主任者、情報セキュリティマネジメント、ExcelVBA etc.
  • 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
  • お客様にとって本当に良いことかを第一に考える人
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次