MS Access VBA - вывести запись из режима редактирования, чтобы разрешить операции с набором записей - PullRequest
0 голосов
/ 25 мая 2018

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

Независимо от того, является ли это хорошей практикой или нет, как я могу использовать vba, чтобы заставить приложение отменить, игнорировать или завершить операцию редактирования формы, чтобы операция набора записей могла продолжаться ... или это просто невозможнопотому что GUI не может быть «выпущен» из VBA (вроде как при редактировании ячеек Excel)?

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Форма привязана к данным?Это не похоже на это.

Me!SomeField = ...
DoCmd.RunCommand acCmdSaveRecord

Если ваша форма имеет элемент управления, связанный с «SomeField», то форма будет обновляться автоматически.

1) Обновлять записи с использованием кода SQL.Например, у вас есть идентификатор записи, который должен быть обновлен в наборе данных формы, так что вы можете написать что-то вроде:

Call CurrentDB.Execute( _
"UPDATE SomeTable SET SomeField = SomeValue WHERE SomeTableID = " & Me!SomeTableID, dbSeeChanges)

2) Вы можете посмотреть на свойство Bookmark - и набор записей, и форма имеют этосвойство, оно описывает позицию записи.Таким образом, вы можете написать что-то вроде этого (не лучший пример, но может помочь вам понять):

Dim Rs as Recordset
Set Rs = Me.RecordsetClone 'make a reference copy of the form recordset
Rs.Bookmark = Me.Bookmark 'locate this recordset to the form current record
0 голосов
/ 25 мая 2018

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

Таким образом, вы можете перейти:

if me.dirty = True then me.Dirty = False

' now call your update routines etc.

Поскольку эти другие подпрограммы вполне могут обновлятьсяэкран / запись, которую вы просматриваете, затем вы можете выполнить me.Refresh, чтобы убедиться, что отображаются все изменения.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...