Microsoft Access 2003 ADP を使用しています。これは、バインドされた「メイン」フォームと、いくつかのバインドされた連続スタイルのサブフォームを使用しています。それらはすべて、ヘルパー クラスを介して切断されたレコードセットを利用します。
複数のユーザーが同じ奇妙な動作に気付きました: 連続サブフォームでレコードを追加/編集し、レコードを残し (編集をレコードセットにコミットします)、コンピューターをロックし (Ctrl+Alt+Del)、コンピューターのロックを解除します。フォームに戻り、約 5 秒後にちらつき、元の未編集の状態に戻ります。
上記の手順に従ってこれを再現できました。さらに、切断されたレコードセットにバインドされたフォームを変更した後、SQL Server に移動して値を変更しました。コンピューターのロック/ロック解除ルーチンの後、フォームがちらつき、更新され、SQL Server に入力したばかりの新しい値が表示されます。
約 5 秒後に、切断された Recordset が (単独で) 再接続し、Recordset を再クエリしているようです。
ここで多くの情報を提供していないことは承知していますが、切断されたレコードセットの再接続と再クエリで問題が発生した人はいますか? または、少なくともデバッグを開始できる場所のアイデアはありますか?
誰かが自分の環境でこれを再作成したい場合は、データベースを作成するための ADP および SQL スクリプトがあります。
切断されたレコードセットを作成する方法は次のとおりです。
Dim cnn As ADODB.Connection
Dim stmTest As ADODB.Stream
Set cnn = New ADODB.Connection
cnn.Open Application.CurrentProject.AccessConnection.ConnectionString
' Create recordset and disconnect it.
Set mrsTest = New ADODB.Recordset
mrsTest.CursorLocation = adUseClient
mrsTest.Open "SELECT * FROM [tblChild] WHERE ParentID = 1" _
, cnn _
, adOpenStatic, adLockBatchOptimistic
Set mrsTest.ActiveConnection = Nothing
cnn.Close
Set cnn = Nothing
' Copy recordset to stream in memory.
Set stmTest = New ADODB.Stream
stmTest.Open
mrsTest.Save stmTest, adPersistADTG
' Bind form to disconnected recordset.
Set Me.Recordset = mrsTest
' Open a copy of the recordset from the stream.
Set mrsTest = New ADODB.Recordset
stmTest.Position = 0
mrsTest.Open stmTest