[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/03/08(Wed) 13:27
投稿者名:いもーに
Eメール:
URL :
タイトル:
Begin.Transでエラー
VBでSQL Serverのテーブルへの書き込みを行っています。
以下のようなループの中で、BeginTransとCommitTransしています。

For 〜
 objCn.BeginTrans
 (テーブル書き込み)
 objCn.CommitTrans
Next

上のobjCn.BeginTransを実行した時に次のようなエラーメッセージが表示されます。
「1つ以上のODBC接続が使用中のためトランザクションを開始できません」

デバッグしてみたのですが、上のobjCn.BeginTransは、初めて実行された時に上のようなエラーに
なりますが、最初だけステップを飛ばすと、2回目以降にループはエラーになりませんでした。

ネットでもいろいろ検索してみたのですが、原因がわかりません。
情報を頂けるとありがたいです。

ちなみに、このプログラムはWindowsNT Server4.0では動作しています。
現在のサーバはWindows Server2003ですが、そのまま動作させようとしたところエラーになっていた
のに気づきました。

投稿時間:2006/03/08(Wed) 17:52
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: Begin.Transでエラー
> VBでSQL Serverのテーブルへの書き込みを行っています。
その部分のコードを見ないとなんとも……。

ADO 関係だとすれば、よくある話としてはこのあたり。

hhttp://www.aspemporium.com/support.aspx?PRB027
hhttp://msdn.microsoft.com/library/en-us/dnproasp/html/tipsforworkingwithcursors.asp


> 「1つ以上のODBC接続が使用中のためトランザクションを開始できません」
あれ。SQL Server なのに "ODBC" ですか……。

それはもしかして、
 (a) ADO ではなく、RDOを使って接続している。
 (b) ADO だが、SQL Server Provider ではなく、ODBC Provider 経由で接続している。
のどちらかである、という状態なのでしょうか?

# それとも大穴で、
#  (c) DAO + ODBCDirect 経由で接続している
#  (d) DAO + ODBC リンクテーブルで接続している
# とか?

> デバッグしてみたのですが、上のobjCn.BeginTransは、初めて実行された時に上のようなエラーに
> なりますが、最初だけステップを飛ばすと、2回目以降にループはエラーになりませんでした。
その前に、どこかで BeginTrans を呼び出している場所はありませんか?

SQL Server 自体は、トランザクションを入れ子にする事ができますが、
ミドルウェア側によっては、それに対応していなかったりしますので。

投稿時間:2006/03/10(Fri) 14:15
投稿者名:いもーに
Eメール:
URL :
タイトル:
Re^2: Begin.Transでエラー
レスありがとうございました。返事が遅れましてすいません。

明示的にBeginTransをしている箇所は他には無いです。
結果的にですが、BeginTransの直前でレコードセットをクローズしたらエラーは出なくなったそうです

まだまだ知識不足で分からない部分が多いですので、対応した人に聞いてみます。

ありがとうございました。

投稿時間:2006/03/11(Sat) 00:48
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: Begin.Transでエラー
> 結果的にですが、BeginTransの直前でレコードセットをクローズしたらエラーは出なくなったそうです

先に示した URL の内容と同じ理由だった('firehose cursor'で開かれているRecordsetが存在していた)

……という事ですかね? (^^;