Различать обновления и вставки в форме MS Access .AfterUpdate - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть связанная форма в MS Access.Я хочу иметь возможность сказать:

  1. Когда вставляется новая запись
  2. Когда обновляется существующая запись

Я думал, что события Form.AfterUpdate и Form.AfterInsert было бы идеально для этого, но я только что протестировал Form.AfterUpdate и обнаружил, что он срабатывает после обновлений и вставляет .

Есть ли какой-нибудь способ определить разницу между обновлениямиа вставки изнутри Form_AfterUpdate()?Или есть другой подход к обнаружению этих событий в Access, который я должен рассмотреть?

Private Sub Form_AfterInsert()
    Debug.Print "after insert"
End Sub

Private Sub Form_AfterUpdate()
    Debug.Print "after update"
End Sub

Когда я вставляю новую запись, это печатается:

after update
after insert

Когда я обновляю существующуюзапись, это печатается:

after update

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Я думаю, что если это имеет значение для вас, то вы не должны использовать AfterUpdate или AfterInsert, а на самом деле BeforeUpdate событие.Вы не говорите, зачем вам нужно знать, является ли запись вставкой или обновлением, и что вы планируете делать в обоих случаях.Несмотря на это, у меня трудное время для создания хорошего сценария, в котором вам нужно знать, что в событии After***.

В BeforeUpdate вы все равно можете проверить свойство NewRecord и взять некоторыедействия, основанные на этом.Что еще более важно, вы можете отменить попытку вставки / обновления, установив для параметра Cancel значение true в событии BeforeUpdate.

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

События AfterUpdate и AfterInsert хороши для того, чтобы что-то делать после свершившегося факта, и, как правило, не заботятся о том, как появилась запись.Примеры включают такие вещи, как обновление связанной формы, изменение фокуса, включение / отключение элементов управления и тому подобное.Обратите внимание, что все примеры, которые я привел, были связаны с пользовательским интерфейсом.Вот для чего это нужно и нужно использовать вот так.

0 голосов
/ 23 февраля 2019

Если вам действительно нужно знать, было ли это новое или существующее обязательство записи, используйте событие BeforeUpdate, чтобы установить переменную уровня модуля, которую затем можно прочитать в событии AfterUpdate.

Option Compare Database
Option Explicit

Dim booNew As Boolean

Private Sub Form_BeforeUpdate(Cancel As Integer)
    booNew = Me.NewRecord
End Sub

Private Sub Form_AfterUpdate()
    Debug.Print IIf(booNew, "New", "Existing")
End Sub
...