Набор записей, отключенный от MS Access ADP, Восстанавливается

StackOverflow https://stackoverflow.com/questions/2219319

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть Microsoft Access 2003 ADP, который использует связанную "основную" форму с несколькими связанными подчиненными формами в непрерывном стиле.Все они используют несвязанные наборы записей через вспомогательный класс.

Несколько пользователей заметили такое же странное поведение:они добавляют / редактируют запись в непрерывной подчиненной форме, они оставляют запись (фиксируя редактирование в наборе записей), они блокируют компьютер (Ctrl + Alt + Del), они разблокируют компьютер, они возвращаются к форме, примерно через 5 секунд она мерцает и возвращается в исходное неотредактированное состояние.

Я смог воспроизвести это, выполнив описанные выше шаги, далее, после внесения изменений в мою форму, привязанную к отключенному набору записей, я зашел на SQL Server и изменил значение.После выполнения процедуры блокировки / разблокировки компьютера форма мигает и обновляется, и появляется НОВОЕ значение, которое я только что ввел в SQL Server.

Это как если бы примерно через 5 секунд мой отключенный набор записей повторно подключался (самостоятельно) и запрашивал набор записей.

Я понимаю, что не даю здесь много информации, но сталкивался ли кто-нибудь с проблемой повторного подключения и запроса отключенных наборов записей?Или, по крайней мере, есть идеи о том, с чего я мог бы начать отладку?

У меня есть 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
Это было полезно?

Решение

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

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

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

Стив

Другие советы

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

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

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

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

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

Спасибо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top