Отключение MS Access ADP отключил набор записей

У меня есть 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

3 ответа

Решение

Я хотел обрабатывать транзакции (кнопки "Сохранить" и "Отмена") без блокировки таблиц в моей многопользовательской системе. Для непрерывных форм в Access to work они должны быть связаны с набором записей.

Вы можете использовать формы / подчиненные формы, связанные с временными таблицами, чтобы добиться именно этого эффекта.

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

Стив

Наверное, немного оффтоп, но это интересный код. Я никогда не думал о работе с такими наборами данных. Есть ли конкретная причина, по которой вы используете эти "отключенные наборы данных"?

Некоторое время назад я тоже экспериментировал с тем же кодом и имел такой же опыт.

Вот как я вижу, почему набор записей подключается к серверу...

Если вы проверите источник записей вашей формы (после привязки набора записей), вы увидите, что ваш SQL-оператор помещен туда как значение. Поскольку это ADP, ваша форма всегда связана с сервером. Следовательно, когда форма обновляется, набор записей также обновляется.

Если вы найдете решение этой проблемы, пожалуйста, напишите!

Спасибо.

Другие вопросы по тегам