Compartilhar via


Evento Form.BeforeUpdate (Access)

O evento BeforeUpdate ocorre antes de os dados alterados em um controle ou registro serem atualizados.

Sintaxe

expressão. BeforeUpdate (Cancelar)

expressão Uma variável que representa um objeto Form.

Parâmetros

Nome Obrigatório/Opcional Tipo de dados Descrição
Cancel Obrigatório Integer A configuração determina se o evento BeforeUpdate ocorre. Definir o argumento Cancelar como True (1) cancela o evento BeforeUpdate .

Comentários

Alterar dados em um controle usando o Visual Basic ou uma macro que contém a ação DefinirValor não dispara esses eventos para o controle. No entanto, se você move para outro registro ou salva o registro, o evento BeforeUpdate do formulário ocorrer.

Para executar uma macro ou procedimento de evento quando esse evento ocorrer, defina a propriedade BeforeUpdate como o nome da macro ou para [Procedimento de Evento].

Esse evento não se aplica a botões de opção, caixas de seleção ou botões de alternância em um grupo de opções. Ele se aplica somente ao grupo de opções propriamente dito.

O evento BeforeUpdate é acionado quando um controle ou registro é atualizado. Em um registro, os dados alterados em cada controle são atualizados quando o controle perde o foco ou quando o usuário pressiona Enter ou Tab. Quando o foco sai do registro ou se o usuário clicar em Salvar Registro no menu Registros , todo o registro será atualizado e os dados serão salvos no banco de dados.

Quando você insere dados novos ou alterados em um controle em um formulário e, em seguida, passa para outro registro ou salva o registro clicando em Salvar Registro no menu Registros , o evento AfterUpdate para o formulário ocorre imediatamente após o evento AfterUpdate para o controle.

Quando você passa para um registro diferente, os eventos Exit e LostFocus para o controle ocorrem, seguidos pelo evento Current para o registro para o qual você se mudou e os eventos Enter e GotFocus para o primeiro controle neste registro. Para executar a macro ApósAtualizar ou procedimento de evento sem executar as macros Exit e LostFocus ou procedimentos de evento, salve o registro usando o comando Salvar registro no menu registros.

BeforeUpdate macros e procedimentos de evento executar somente se você alterar os dados em um controle. Esse evento não ocorre quando um valor é alterado em um controle calculado. BeforeUpdate macros e procedimentos de evento para um formulário executar somente se você alterar os dados em um ou mais controles no registro.

Para formulários, você pode usar o evento BeforeUpdate para cancelar a atualização de um registro antes de mover para outro registro.

Se o usuário insere um novo valor no controle, a configuração da propriedade OldValue não será alterada até que os dados são salvos (o registro é atualizado). Se você cancelar uma atualização, o valor da propriedade OldValue substituirá o valor existente no controle.

Geralmente você utilizar o evento BeforeUpdate para validar dados, especialmente quando são efetuadas validações complexas, como as que:

  • Envolvem condições para mais de um valor em um formulário.
  • Exibem mensagens de erro distintas à medida que dados diferentes são inseridos.
  • Podem ser substituídas pelo usuário.
  • Contêm referências a controles de outros formulários ou contêm funções definidas pelo usuário.

Observação

[!OBSERVAçãO] Para executar validações simples ou validações mais complexas, como solicitar um valor em um campo ou validar mais de um controle em um formulário, você pode usar a propriedade ValidationRule para controles e as propriedades ValidationRule e necessárias para campos e registros em tabelas.

Um erro de tempo de execução ocorre se você tentar modificar os dados contidos no controle que disparou o evento BeforeUpdate no procedimento do evento.

Exemplo

O exemplo a seguir mostra como você pode usar um procedimento de evento BeforeUpdate para verificar se um nome de produto já foi inserido no banco de dados. Depois que o usuário digitar um nome de produto na caixa ProductName, o valor será comparado ao campo ProductName na tabela Products. Se houver um valor correspondente na tabela Products, uma mensagem será exibida para informar ao usuário que o produto já foi inserido.

Para testar o exemplo, adicione o seguinte procedimento de evento a um formulário denominado Products que contém uma caixa de texto denominada 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

O exemplo a seguir mostra como exibir uma mensagem quando um controle estiver vazio em um formulário contínuo, quando um usuário vai para outro registro.

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

O exemplo a seguir mostra como usar o evento BeforeUpdate de um formulário para exigir que um valor seja inserido em um controle quando outro controle também tem dados.

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

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.