ココに注意
この記事の内容でトランザクションの問題
があることが分かりました。
解決策をみつけましたので、下記のサイト内リンクを参考にしてください。
【Access】複数クエリをVBAでトランザクションをしてもロールバックしない問題を検証
私の様にVBAでバリバリと組めない人は、
ココがポイント
VBAとクエリを組み合わせて使えばいい
んじゃないかと思います。
今回は、トランザクション処理も付加して安全に複数のクエリを実行できるようにしました。
トランザクション処理は、既知の一貫した状態のデータベースを維持するよう設計されており、相互依存のある複数の操作が全て完了するか、全てキャンセルされることを保証する。
つまり、途中で何かのエラーで止まったとしてもデータを途中で放置しないで、元に戻すか、最後まで実行できることをトランザクション処理と言います。
下記に全体のVBA内容を記載します。
[php] Private Sub サンプル_Click() Dim cn As New ADODB.Connection Dim cmd As ADODB.Command If MsgBox("処理を実行しますか? ", vbYesNo, "更新確認") = vbYes Then Set cn = CurrentProject.Connection Set cmd = New ADODB.Command cmd.ActiveConnection = cn On Error GoTo ErrorHandler cmd.CommandText = "BEGIN TRANSACTION" cmd.Execute DoCmd.SetWarnings False DoCmd.OpenQuery "クエリ1" DoCmd.OpenQuery "クエリ2" DoCmd.OpenQuery "クエリ3" DoCmd.OpenQuery "クエリ4" cmd.CommandText = "COMMIT TRANSACTION" cmd.Execute Set cmd = Nothing cn.Close: Set cn = Nothing Else MsgBox "処理せずに終了しました。" Exit Sub End If ExitErrorHandler: Exit Sub ErrorHandler: cmd.CommandText = "ROLLBACK TRANSACTION" cmd.Execute Set cmd = Nothing cn.Close: Set cn = Nothing MsgBox "エラーが発生しました。処理せずに戻ります。" End End Sub [/php]
とにかく、何も考えずに、クエリ1~4までの場所に動かしたいクエリを入れればいいだけです。増やす事も、減らすことも可能です。
ここでは、細かいトランザクション処理の説明は省きますが、複数のクエリを実行して、データを整える場合があるときに、トランザクション処理が入っていると本当に安心です。