Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se ao: Access 2013, Office 2013
O evento Antes de Alterar ocorre quando um registro é alterado, mas antes da alteração ser submetida.
Observação
O evento Antes de Alterar está disponível somente em Macros de Dados.
Comentários
Use o evento Antes de Alterar para executar qualquer ação que você deseja que ocorra antes da alteração de um registro. O Antes de Alterar é comumente usado para executar validação e criar mensagens de erro personalizadas.
Você pode usar a função Updated("Nome do Campo") para determinar se um campo foi alterado. O exemplo de código a seguir mostra como usar uma instrução If para determinar se o campo PaidInFull foi alterado.
If Updated("PaidInFull") Then
/* Perform actions based on changes to the field. */
End If
Use a propriedade Inserido para determinar se o evento Antes de Alterar foi acionado por um novo registro que está sendo criado ou por uma alteração em um registro existente. A propriedade Inserido apresentará o valor True se o evento tiver sido acionado por um novo registro, e False se o evento tiver sido acionado por uma alteração em um registro existente.
O exemplo de código a seguir mostra a sintaxe para o uso da propriedade Inserido.
If [IsInsert] = True Then
/* Actions for validating a new record go here. */
Else
/* Actions for processing a changed record go here. */
End If
Você pode acessar um valor anterior em um campo utilizando a sintaxe a seguir.
[Old].[Field Name]
Por exemplo, para acessar o valor anterior do campo QuantidadeEmEstoque, use a sintaxe a seguir.
[Old].[QuantityInStock]
Os valores anteriores são excluídos permanentemente após a conclusão do evento Antes de Alterar.
Você pode cancelar o evento Antes de Alterar utilizando a ação GerarErro. Quando um erro é exibido, as alterações contidas no evento Antes de Alterar são descartadas.
A tabela a seguir lista comandos de macro que podem ser usadas no evento Antes de Alterar.
Tipo de comando |
Comando |
|---|---|
Fluxo do programa |
|
Fluxo do programa |
|
Fluxo do programa |
|
Bloco de dados |
|
Ação de Dados |
|
Ação de Dados |
|
Ação de Dados |
|
Ação de Dados |
|
Ação de Dados |
|
Ação de Dados |
Para criar uma Macro de Dados que capture o evento Antes de Alterar, siga estas etapas.
Abra a tabela na qual deseja capturar o evento Antes de Alterar.
Na guia Tabela, no grupo Antes de eventos, clique em Antes de Alterar.
Uma macra de dados vazia é exibida no designer de macros.
Exemplo
O exemplo de código a seguir usa o evento Antes de Alterar para validar os campos Status. Um erro será exibido se houver um valor incorreto no campo Resolução.
/* Check to ensure that if the bug is resloved that the user has selected a resolution */
If [Status]="3 - Resolved" And IsNull([Resolution]) Then
RaiseError
Error Number 1
Error Description You must select a resolution.
End If
/* Check to ensure that if a bug is closed that the user has selected a resolution first */
If [Status]="4 - Closed" And IsNull([Resolution]) Then
RaiseError
Error Number 2
Error Description An issue must be resolved before it can be closed.
End If
If [Status]<>"3 - Resolved" And [Status]<>"4 - Closed" Then
SetField
Name Resolution
Value =Null
End If
Para exibir este exemplo no designer de macros, siga estas etapas.
Abra a tabela na qual deseja capturar o evento Antes de Alterar.
Na guia Tabela, no grupo Antes de Eventos, clique em Antes de Alterar.
Selecione o código no exemplo de código a seguir e pressione CTRL+C para copiá-lo para a área de transferência.
Ative a janela do designer de macro e pressione CTRL+V.
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/04/application">
<DataMacro Event="BeforeChange">
<Statements>
<Comment>Check to ensure that if the bug is resloved that the user has selected a resolution </Comment>
<ConditionalBlock>
<If>
<Condition>[Status]="3 - Resolved" And IsNull([Resolution])</Condition>
<Statements>
<Action Name="RaiseError">
<Argument Name="Number">1</Argument>
<Argument Name="Description">You must select a resolution.</Argument>
</Action>
</Statements>
</If>
</ConditionalBlock>
<Comment>Check to ensure that if a bug is closed that the user has selected a resolution first </Comment>
<ConditionalBlock>
<If>
<Condition>[Status]="4 - Closed" And IsNull([Resolution])</Condition>
<Statements>
<Action Name="RaiseError">
<Argument Name="Number">2</Argument>
<Argument Name="Description">An issue must be resolved before it can be closed.</Argument>
</Action>
</Statements>
</If>
</ConditionalBlock>
<ConditionalBlock>
<If>
<Condition>[Status]<>"3 - Resolved" And [Status]<>"4 - Closed"</Condition>
<Statements>
<Action Name="SetField">
<Argument Name="Field">Resolution</Argument>
<Argument Name="Value">Null</Argument>
</Action>
</Statements>
</If>
</ConditionalBlock>
</Statements>
</DataMacro>
</DataMacros>
O exemplo a seguir mostra como usar a ação RaiseError para cancelar o evento de macro de dados Antes de Alterar. Quando o campo AssignedTo é atualizado, um bloco de dados LookupRecord é usado para determinar se o técnico atribuído está atribuído atualmente a uma solicitação de serviço aberta. Se isso for verdadeiro, o evento Before Change será cancelado e o registro não será atualizado.
Código de exemplo fornecido por: a Referência do programador do Microsoft Access 2010.
/* Get the name of the technician */
Look Up A Record In tblTechnicians
Where Condition =[tblTechnicians].[ID]=[tblServiceRequests].[AssignedTo]
SetLocalVar
Name TechName
Expression [tblTechnicians].[FirstName] & " " & [tblTechnicians].[LastName]
/* End LookUpRecord */
If Updated("AssignedTo") Then
Look Up A Record In tblServiceRequests
Where Condition SR.[AssignedTo]=tblServiceRequests[AssignedTo] And
SR.[ID]<>tblServiceRequests.[ID] And IsNull(SR.[ActualCompletionDate])
Alias SR
RaiseError
Error Number 1234
Error Description ="Cannot assign a request to the specified technician: " & [TechName]
End If