Evento Form.BeforeUpdate (Access)

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

Sintaxe

mais simples. 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 Cancel 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 como [Event Procedure].

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 clica em Salvar Registro no menu Registros , todo o registro é atualizado e os dados são salvos no banco de dados.

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

Quando você move para um registro diferente, os eventos Exit e LostFocus do controle ocorrem, seguidos pelo evento Current do registro para o qual você mudou e os eventos Enter e GotFocus para o primeiro controle desse 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.

Ocorrerá um erro em tempo de execução 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.