У меня есть Microsoft Access 2003 ADP, в котором используется связанная «основная» форма с несколькими связанными подчиненными формами непрерывного стиля. Все они используют отключенные наборы записей через вспомогательный класс.
Некоторые пользователи заметили такое же странное поведение: они добавляют / редактируют запись в непрерывной подчиненной форме, оставляют запись (фиксируя редактирование в Recordset), блокируют компьютер (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