Поделиться через


Событие Form.BeforeUpdate (Access)

Событие BeforeUpdate возникает перед обновлением измененных данных в элементе управления или записи.

Синтаксис

expression. BeforeUpdate (Cancel)

выражение: переменная, представляющая объект Form.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Отмена Обязательный Integer Параметр определяет, возникает ли событие BeforeUpdate . Если для аргумента Cancel задано значение True (1), событие BeforeUpdate будет отменено .

Замечания

Изменение данных в элементе управления с помощью Visual Basic или макроса, содержащего действие SetValue, не активирует эти события для элемента управления. Однако при переходе к другой записи или сохранении записи возникает событие BeforeUpdate формы.

Чтобы выполнить макрос или процедуру события при возникновении этого события, задайте для свойства BeforeUpdate имя макроса или [Процедура события].

Это событие не применяется к кнопкам параметров, флажкам или переключателям в группе параметров. Он применяется только к самой группе параметров.

Событие BeforeUpdate активируется при обновлении элемента управления или записи. В записи измененные данные в каждом элементе управления обновляются, когда элемент управления теряет фокус или когда пользователь нажимает клавишу ВВОД или TAB. Когда фокус покидает запись или пользователь нажимает кнопку Сохранить запись в меню Записи , вся запись обновляется, а данные сохраняются в базе данных.

При вводе новых или измененных данных в элементе управления в форме, а затем переходе к другой записи или сохранении записи путем нажатия кнопки Сохранить запись в меню Записи событие AfterUpdate для формы возникает сразу после события AfterUpdate для элемента управления .

При переходе на другую запись возникают события Exit и LostFocus для элемента управления, за которым следует событие Current для записи, в которую вы переехали, и события ENTER и GotFocus для первого элемента управления в этой записи. Чтобы выполнить макрос или процедуру событий AfterUpdate без выполнения макросов exit и LostFocus или процедур событий, сохраните запись с помощью команды Сохранить запись в меню Записи .

Макросы и процедуры событий beforeUpdate выполняются только при изменении данных в элементе управления. Это событие не возникает при изменении значения в вычисляемом элементе управления. BeforeUpdate макросы и процедуры событий для формы выполняются только при изменении данных в одном или нескольких элементах управления в записи.

Для форм можно использовать событие BeforeUpdate , чтобы отменить обновление записи перед переходом на другую запись.

Если пользователь вводит новое значение в элементе управления, параметр свойства OldValue не изменяется до тех пор, пока данные не будут сохранены (запись будет обновлена). При отмене обновления значение свойства OldValue заменяет существующее значение в элементе управления .

Событие BeforeUpdate часто используется для проверки данных, особенно при выполнении сложных проверок, таких как:

  • Использование условий для нескольких значений в форме.
  • Отображение различных сообщений об ошибках для разных введенных данных.
  • Может быть переопределен пользователем.
  • Содержат ссылки на элементы управления в других формах или пользовательские функции.

Примечание.

Для выполнения простых проверок или более сложных проверок, таких как требование значения в поле или проверка нескольких элементов управления в форме, можно использовать свойство ValidationRule для элементов управления и свойства ValidationRule и Required для полей и записей в таблицах.

Ошибка времени выполнения возникает при попытке изменить данные, содержащиеся в элементе управления, который вызвал событие BeforeUpdate в процедуре события.

Пример

В следующем примере показано, как можно использовать процедуру события BeforeUpdate для проверки того, введено ли имя продукта в базе данных. После ввода имени продукта в поле ProductName значение сравнивается с полем ProductName в таблице Products . Если в таблице Products есть соответствующее значение, отображается сообщение, информирующее пользователя о том, что продукт уже введен.

Чтобы попробовать пример, добавьте следующую процедуру события в форму с именем Products , содержащую текстовое поле с именем ProductName.

Private Sub ProductName_BeforeUpdate(Cancel As Integer) 
    If(Not IsNull(DLookup("[ProductName]", _ 
        "Products", "[ProductName] ='" _ 
        & Me!ProductName & "'"))) Then 
        MsgBox "Product has already been entered in the database." 
        Cancel = True 
        Me!ProductName.Undo 
    End If 
End Sub

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

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim oContr As Control
    For Each oContr In Me.Detail.Controls
        If IsNull(oContr) = True Then
            If MsgBox(oContr.Name & " is empty", vbOKCancel) = vbCancel Then
                Cancel = True: oContr.SetFocus: Exit Sub
            End If
        End If
    Next oContr
End Sub

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

Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(Me.FieldOne)) Or (Me.FieldOne.Value =  "") Then
    ' No action required
Else
    If (IsNull(Me.FieldTwo)) or (Me.FieldTwo.Value = "") Then
        MsgBox "You must provide data for field 'FieldTwo', " & _
            "if a value is entered in FieldOne", _
            vbOKOnly, "Required Field"
        Me.FieldTwo.SetFocus
        Cancel = True
        Exit Sub
    End If
End If

End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.