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.