2013年9月4日

Accessのトランザクションにハマるの巻

 人から引き継いだMS Accessのプログラムで外部ファイルをテーブルに取り込んで処理をするというよくあるプログラムのバグ調査をしている時にトランザクションに関わるプログラムのバグに悩まされた。

 トランザクションを開始してから、入力ファイルがないのでそのサブルーチンをを抜けるというロジックがありました。
 で、トランザクションを閉じず(Commitとか、Rollback)にサブルーチンを抜けているもんだから、次のサブルーチンでトランザクションを開始してテーブルにレコードをいくら登録して、全然登録されないという気持悪い現象に大ハマリでした。

 1)トランザクション開始(BeginTrans) ← これをちゃんと閉じないのが問題!
 ↓
 2)トランザクション開始(BeginTrans)
 ↓
 3)レコードをINSERTを繰り返す
 ↓
 4)Commit
 ↓
 5)終わり

 1)のトランザクションがかかりっぱなしなので、4)でコミットをしてもデータは登録されずにそのまま。


 Accessは、Workspaceに対してトランザクションをかけるのですが、同じワークスペースには、1つしかトランザクションをかけられないので、1)のトランザクションは、かかっているけど、触りようがないトランザクションになっているのです。


 開けたら、閉める。これ当たり前の動作。皆さん気を付けましょう。


これでやっと、本当のバグ調査ができますよ。

0 件のコメント:

コメントを投稿