【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.
- 業務フロー図の作成や業務時間分析を通して、効率化ポイントを探る人
- お客様にとって本当に良いことかを第一に考える人
コメント