結論から先に言うと:
Option=3 だけでは、トランザクション(BEGIN/COMMIT/ROLLBACK)は自動では有効になりません。
つまり、
- Option=3 = SQL_AUTO_IS_NULLオフ(1)+スペースパディングオフ(2)
- トランザクション有効化用のビット(16)は含まれていません!
【整理】Optionの意味
ビット値 | 意味 |
---|---|
1 | SQL_AUTO_IS_NULLをオフ |
2 | CHAR列のスペースパディングをオフ |
16 | トランザクションサポート有効(!) |
→ トランザクションを使いたいなら、Optionに16を含める必要があります。
【正しい設定例】
たとえば、
通常のOption=3 にトランザクションサポートも追加したい場合
3 + 16 = 19
だから、接続文字列では
"Driver={MySQL ODBC 8.0 ANSI Driver};Server=localhost;User=root;Password=your_password;Option=19;"
にします!
【まとめ】
項目 | 結論 |
---|---|
Option=3だけの場合 | トランザクションサポートは有効にならない |
トランザクションを有効にするには | Optionに16を加える(例:3 + 16 = 19) |
推奨設定 | 最初からOption=19にするのが安全 |
【実際にADOトランザクションを使う流れ】
Dim con As Object Set con = CreateObject("ADODB.Connection") con.Open "Driver={MySQL ODBC 8.0 ANSI Driver};Server=localhost;User=root;Password=your_password;Option=19;" ' トランザクション開始 con.BeginTrans ' SQLを実行 con.Execute "INSERT INTO table1 (col1) VALUES ('test')" ' 成功したら確定 con.CommitTrans ' 失敗したらロールバック(エラー処理で) con.RollbackTrans
ADOには
BeginTrans
CommitTrans
RollbackTrans
があります。
これを手動で管理できるようになります。
【補足】
- MySQL自体がInnoDBなどのトランザクション対応エンジンを使っている必要があります。
- テーブルがMyISAM型だと、トランザクションしても効果がありません(MyISAMは非対応)。
【結論まとめ】
設定 | 内容 |
---|---|
Option=3 | トランザクション無効(通常接続) |
Option=19 | トランザクション有効(3+16) |
トランザクション操作(BeginTrans, CommitTrans) | 手動で行う必要がある |
✏️ 必要なら、このOptionの違いをテストするサンプル(トランザクションあり/なしを比較するVBAコード)も作れます!
👉 作成しますか?(すぐ見分けられる実験用コードです)