Есть ли способ отмены автоматического обновления записей форм Access 2007, созданных с помощью мастера форм? - PullRequest
4 голосов
/ 07 сентября 2010

Я новичок в Access VBA и создал форму с помощью мастера форм, который отображает записи в таблице.Это просто пирог.

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

Я бы хотел, чтобыобновления происходят только при нажатии кнопки «Обновить», которую я ввел в форму.

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

Есть ли способ "отключить" автоматическое обновление поведения изнутри Access или с помощью кода VBA?

Спасибо!

Ответы [ 4 ]

6 голосов
/ 08 сентября 2010

Как предложил Роберт, вы можете избежать сохранения измененной записи, отменив событие перед обновлением.Код будет выглядеть примерно так:

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.Undo
    Cancel = True
End Sub

Однако этот подход требует от вас отказаться от любых изменений, внесенных в запись, прежде чем вы сможете ее удалить.Без Me.Undo вы можете отменить обновление, но Access не позволит вам перейти к другой записи.Вы должны либо сохранить, либо отменить изменения в текущей записи, прежде чем переходить к другой.

Если вы хотите перейти к другой записи, но не отменить изменения в первую очередь, я думаю, вам нужно попробовать отключенный набор записей.Это набор записей ADO, который вы создаете в памяти, не привязанный к какому-либо источнику данных.Вы можете добавить командную кнопку, чтобы сохранить ваши изменения по команде.Если это кажется полезным, см. Эту статью Дэнни Лесандрини в Database Journal: Создание наборов записей ADO в памяти

3 голосов
/ 08 сентября 2010

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

1 голос
/ 08 сентября 2010

Зачем вам это нужно?Доступ работает на записи на основе записи.В отличие от Excel, который сохраняет электронную таблицу только при выборе сохранения или выхода.

Похоже, у вас есть непрерывная форма с несколькими записями на экране.Единственный способ сделать это - использовать «временную» таблицу и сохранить содержимое «временной» таблицы в постоянной таблице, как только вы будете готовы.Однако тогда вы потеряете способность определять, изменил ли кто-либо записи, если вы не проделаете намного больше работы.

1 голос
/ 08 сентября 2010

Есть ли способ "отключить" режим автоматического обновления из Access или с помощью кода VBA?

Вы можете попробовать отменить событие Form.BeforeUpdate, если не установлен флажокустановлено.Когда кнопка нажата, установите флаг, установите для Form.Dirty значение false (для сохранения данных), а затем снимите флаг в обработчике событий Form.BeforeUpdate.

...