ODBCDirectで、Commit後もカーソルを保持したい


なべ  2005-10-27 18:53:29  No: 126980

もともとmdbにデータを持っていたDAO/Jetのプログラムを、
なるべく変更しないでSQL Serverに対応させたいため、
DAO/ODBCDirectで動かそうとしています。

〜環境〜
VB6.0
Access2000→SQL Server2000

DAO/Jetでは、CommitTrans前にOpenしたRecordSetに対して、CommitTrans後もアクセスできたのですが、
ODBCDirectでは実行時エラー3670(カーソルが無効です)となってしまいます。
原因は下記のためと思われます。

http://support.microsoft.com/default.aspx?scid=kb;ja;409745
> 詳細
> 〜中略〜
> SQL Server(TM) ODBC Driver バージョン2.65.0240 の仕様によるものです。
> トランザクション処理後のカーソルの振る舞いは ODBC ドライバによって決定されます。
> 〜中略〜
> SQL Server ODBC Driver は SQL_CB_CLOSE が設定されているため、
> コミットおよびロールバック後にカーソルはクローズされます。
> その後、カーソルを必要とする Recordset オブジェクトの操作を行うとエラーが発生します。
> 対処方法
> CommitTrans メソッド、Rollback メソッド実行後に Requery メソッドにより
> Recordset オブジェクトを再構築してください。

対処はRequeryとなっているのですが、そうではなく、
SQL_CB_PRESERVE(カーソル保持)に変更する方法はないでしょうか?
ODBC APIだとSQLSetConnectOptionなどで変更できるようなのですが...。

何か方法をご存知の方がいらっしゃいましたら、宜しくお願い致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加