2010-02-08 4 views
3

У меня есть ADP Microsoft Access 2003, который использует связанную «основную» форму с несколькими связанными формами непрерывного стиля. Все они используют отключенные Recordsets через вспомогательный класс.MS Access ADP Disconnected Recordset Reverts

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

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

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

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

У меня есть сценарий ADP и SQL для создания базы данных, если кто-то хотел бы воссоздать это в своей среде.

Вот как я создаю отключенный Recordset:

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 

ответ

1

Мне нужна транзакция, как обработка (кнопки «Сохранить и отмена»), без столов, заблокированных в моей многопользовательской системе. Для непрерывных форм в доступе к работе они должны быть привязаны к набору записей.

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

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

Стив

+0

Спасибо за идею. – SLeepdepD

0

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

+0

Я хотел сделку, как обработка (Сохранить и Отмена) без таблиц быть запертым в моей многопользовательскую систему. Для непрерывных форм в Access to work они должны быть привязаны к Recordset. Я нашел много примеров отключенных записей; приведенный выше код пришел отсюда: http://groups.google.com/group/comp.databases.ms-access/browse_frm/thread/01753dbca8189eb3 – SLeepdepD

0

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

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

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

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

спасибо.

+0

Спасибо за ответ. У меня не было времени, чтобы вернуться к этому проекту, однако я смирился с тем, что переписал форму для решения этой проблемы - несвязанной. – SLeepdepD

Смежные вопросы