- ベストアンサー
エクセルVBAでcommit,rollbackを利用する方法
- エクセルVBAを使ってトランザクションを利用してデータベースを更新する方法について説明します。
- エクセルVBAを使って複数の関連テーブルを同時に更新し、トランザクションを利用する方法について説明します。
- エクセルVBAを使ってデータベースの更新処理でエラーが発生した場合、ロールバックを行う方法について説明します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
トランザクション処理はデータベースの機能で、ロールバック ポイントからの変更履歴をメモリ上に保持するわけで、Excel にも、ADODB にもそんな機能は無いはずです。 Excel は表計算ソフト。ADODB はデータベースへ命令する為の 関数群。どちらもデータベースではありませんので。 例えば、SQL サーバーで同様の処理をした場合、Execute で 実行していてもロールバックできます。 http://support.microsoft.com/kb/198024/ja まぁ、Excel はファイルなので、保存しないで開きなおせば 元に戻るのは正しいと思いますが、データベースのトランザ クション処理とは全く関係なくなりますね^^;
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
>1、まずこの様なことが可能なのかどうか 問題は、書き換わるタイミングですが、 > dbCon.Execute (strSQL) ここで、UPDATEで、実行して保存しているわけですから、RollBackTrams しても、戻らないのではないかなって思います。たぶん、何か、Openの時の設定が抜けているのではないかとは思いますが、私は、あまりこの方面は詳しくないので分かりません。 ここにコードはありましたが、どう結びつけてよいか分かりません。 http://msdn.microsoft.com/ja-jp/library/cc364106.aspx 戻すということは、キャッシュか何かに保続されているということになるわけですね。 現実の解決策としては、それは、ブックを開きさえすれば、値は変わっても、保存するかどうか聞いてきますので、保存せずに閉じれば、変更前に戻ります。しかし、これでは、個々の変更には対応できません。もちろん、Where で検索しているのだから、前もって値を取って、それを戻す方法は可能ですね。 あまり良い方法だとは思いませんので、もう少し、こちらも研究してみます。
お礼
回答ありがとうございます。 私もプログラミング自体がほぼ素人なので、いろいろサイトから仕入れた知識しかないので はっきりと言えないのですが、 トランザクション開始→SQL流す→ロールバックorコミット(決定) と言うのがデータベースへの出力への流れと思っているのですが、間違っていましたか? でも、この流れ出ないと意味がないような・・・。 まあ、他の方へのお礼のコメントにも書きましたが、どうもエクセルでやろうってのが 無理があるようですが(^^;) 多分エクセルでやるにはブックのオープンクローズを利用するしか手はないと思われます。 ホントはこれがめんどかったのでADOなるものの存在を知って利用できないかと 思っていたのですが。 仕方ないのでがんばって自分でエラー拾ってロールバックするプログラム書きます(TT)
- piroin654
- ベストアンサー率75% (692/917)
お礼
ご回答ありがとうございます。 こちらのページはこのプログラムを考えているときに参考にさせていただいた一つです。 ですが、エクセルを対象にしての~というものではなさそうで、細かいことに関しては 私のほしい情報がありませんでしたので、こちらに質問の投稿をさせていただきました。 アクセスが自宅にないので、出来ればエクセルでと考えていたのですが、どうもやっぱり 無理なようでしたね(^^;)
お礼
早速の回答ありがとうござます。 ADODBというものの存在を知ってどこまで出来るのかを知りたかったのですよ。 やはりデータベースソフトでないものはトランザクション適応はできないのですね。 自分でプログラムを組まずにデータの出し入れが出来たらと 虫のいいことを考えての試行だったのですが、やっぱり無理なようで。 あきらめて自分でエラーを拾ってブックのオープンクローズで対応する プログラムを組むことにします(^^;)