ココに注意
この記事の内容でトランザクションの問題
があることが分かりました。
解決策をみつけましたので、下記のサイト内リンクを参考にしてください。
https://pctips.jp/pc-soft/access-query-transaction2020/
私の様に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までの場所に動かしたいクエリを入れればいいだけです。増やす事も、減らすことも可能です。
ここでは、細かいトランザクション処理の説明は省きますが、複数のクエリを実行して、データを整える場合があるときに、トランザクション処理が入っていると本当に安心です。