Page 484 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼データのRollbackについて 豆っち 04/1/15(木) 11:31 ┗Re:データのRollbackについて イケガミ 04/1/15(木) 11:53 ┗Re:データのRollbackについて 豆っち 04/1/15(木) 13:18 ┣Re:データのRollbackについて 豆っち 04/1/15(木) 13:27 ┗Re:データのRollbackについて イケガミ 04/1/15(木) 13:40 ┗Re:データのRollbackについて 豆っち 04/1/15(木) 13:52 ┗Re:データのRollbackについて 豆っち 04/1/15(木) 16:26 ─────────────────────────────────────── ■題名 : データのRollbackについて ■名前 : 豆っち ■日付 : 04/1/15(木) 11:31 -------------------------------------------------------------------------
Access2000を使ってRollback、Commitの処理を入れるにはどうやればいいのでしょうか? とりあえずあちこちのHPを調べて下記のようなコードを作ってみたのですが、 うまくRollbackしてくれませんでした。 すごく単純な事だとは思うのですが、よろしくお願いします。m(_ _)m Private Sub コマンド1_Click() Dim flg As Long flg = 1 ' トランザクションSTART DBEngine.Workspaces(0).BeginTrans ' Insert文発行 Call DoCmd.RunSQL("INSERT INTO テーブル1(AAA) VALUES ('TEST')") If flg = 1 Then ' ロールバック DBEngine.Workspaces(0).Rollback Else ' コミット DBEngine.Workspaces(0).CommitTrans End If End Sub |
> Call DoCmd.RunSQL("INSERT INTO テーブル1(AAA) VALUES ('TEST')") DoCmd.RunSQL で実行したものは、トランザクションは使えないと思います。 DAO から ADO への移植 http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado_8.asp こちらに、DAO,ADO双方の記述例があります。 |
▼イケガミ さん: 素早い返信、どうもありがとうございます! >DoCmd.RunSQL で実行したものは、トランザクションは使えないと思います。 なるほど、、、RunSQLを使ってしまうとCommit, Rollbackが できなくなってしまうのですね。 今度はコードをDAOの記述例を参照して作成してみました。 ですが今度はSQLのInsert文がうまく流れないようです。 以下、ソースです。 Private Sub コマンド1_Click() Dim wks As DAO.Workspace Dim db As DAO.Database Dim flg As Long ' 初期処理 flg = 1 Set wks = DBEngine.Workspaces(0) Set db = wks.OpenDatabase("C:\test.mdb") ' Set db = CurrentDb() と、記述可能? ' トランザクションSTART wks.BeginTrans ' Insert文発行 db.Execute "INSERT INTO テーブル1(AAA) VALUES ('TEST');" If flg = 1 Then ' ロールバック wks.Rollback Else ' コミット wks.CommitTrans End If End Sub どうかご指摘の方、よろしくお願いします。m(_ _)m |
すみません、書き忘れです。 DAOを使う際の設定として ・VBAの参照設定で「Microsoft DAO 3.6 Object Library」をON ・矢印を操作して「Microfoft Active X Data Object 2.1 Library」より上位に位置させる の2点はしてあります。 |
> 今度はSQLのInsert文がうまく流れないようです。 ロールバックされているってことじゃないんですか? > flg = 1 > If flg = 1 Then > ' ロールバック > wks.Rollback |
>ロールバックされているってことじゃないんですか? すみません、言葉足らずでした。 テスト時には ・ロールバックにブレークポイントを置き、実行してテーブルの内容を確認 ・flgの値は2にし、処理を終了させてからテーブルの内容を確認 の2点を行いました。 ですがどちらの場合もテーブル1にデータは反映されませんでした。 イケガミさんの口ぶりから察するにどうやらExecuteの使い方はあってるみたいですね。 他の処理部分をもう少し掘り下げて調べてみようと思います。 |
すみません、自己解決しました。 処理の最後に db.Close を入れないとコミットは成功してもテーブルにデータは反映されないのですね。 イケガミさん、どうもありがとうございました! |