※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでcommit,rollback)
エクセルVBAでcommit,rollbackを利用する方法
このQ&Aのポイント
エクセルVBAを使ってトランザクションを利用してデータベースを更新する方法について説明します。
エクセルVBAを使って複数の関連テーブルを同時に更新し、トランザクションを利用する方法について説明します。
エクセルVBAを使ってデータベースの更新処理でエラーが発生した場合、ロールバックを行う方法について説明します。
エクセルVBAでcommit,rollback
初めて質問させていただきます。
エクセルVBAを一人で学習しています。
仕事で使ったことも、教えてもらったこともほとんどありませんのでほぼ初心者です。
今、エクセルファイルを二つ使って、一つをデータベースに、もう一つでそのデータベースを
利用するようなプログラムを書いています。
それで、2つの関連するテーブル(シート)を同時に変更(update)する必要があるのですが、
何らかのエラーが起きてしまったときのことを考えて、トランザクションを利用
出来たらと思っています。
いろいろググってアクセス用のコードを見つけたので、それを元に下のようなプログラムを
書いて試してみたのですが、ロールバックが効かずに更新されてしまいます。
'******** 定数 ***********
Const cnsProvider = "Microsoft.Jet.OLEDB.4.0"
Const cnsExtProp = "Extended Properties"
Const cnsExcel = "Excel 8.0"
Const cnsDBName = "SAMPLE_DB.xls"
Const cnsYen = "\"
'******** プログラム ***********
Sub ADO_update_test()
Dim dbCon As ADODB.Connection
Dim strSQL As String
' -- Connection生成 --
Set dbCon = New ADODB.Connection
With dbCon
.Provider = cnsProvider
.Properties(cnsExtProp) = cnsExcel
.Open ThisWorkbook.Path & cnsYen & cnsDBName
End With
' -- トランザクション開始 --
dbCon.BeginTrans
' -- sql作成 --
strSQL = "update [Sheet1$] set 金額 = 300 where ID = '001';"
' -- sqlを流す --
dbCon.Execute (strSQL)
' -- rollback --
dbCon.RollbackTrans
' -- クローズ・コネクション解放 --
dbCon.Close: Set dbCon = Nothing
End Sub
1、まずこの様なことが可能なのかどうか
2、出来るとしたらどのようにすればいいのか(間違っている点を指摘してください)
以上の2点についてお答えをいただけるとありがたいです。
よろしくお願いいたします。
お礼
早速の回答ありがとうござます。 ADODBというものの存在を知ってどこまで出来るのかを知りたかったのですよ。 やはりデータベースソフトでないものはトランザクション適応はできないのですね。 自分でプログラムを組まずにデータの出し入れが出来たらと 虫のいいことを考えての試行だったのですが、やっぱり無理なようで。 あきらめて自分でエラーを拾ってブックのオープンクローズで対応する プログラムを組むことにします(^^;)