3

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
4

2 に答える 2

1

マルチユーザーシステムで、テーブルをロックせずにトランザクションのような処理 ([保存] ボタンと [キャンセル] ボタン) が必要でした。Access で連続フォームが機能するには、連続フォームが Recordset にバインドされている必要があります。

一時テーブルにバインドされたフォーム/サブフォームを使用して、まさにこの効果を得ることができます。

http://www.access-programmers.co.uk/forums/showthread.php?t=206862

スティーブ

于 2011-09-25T12:24:32.340 に答える
0

おそらく少しオフトピックですが、これは興味深いコードです。このようなデータセットを扱うことについて考えたことはありません。これらの「切断されたデータセット」を使用する特定の理由はありますか?

于 2010-02-08T20:24:11.870 に答える