Partager via


Before Change, événement de macro

S’applique à : Access 2013, Office 2013

L’événement Avant la modification se produit lorsqu’un enregistrement change, mais avant la validation de la modification.

Remarque

L’événement Avant la modification est disponible uniquement dans les macros de données.

Remarques

Utilisez l’événement Avant la modification pour effectuer toute action souhaitée avant qu’un enregistrement soit modifié. Avant la modification s’utilise couramment pour effectuer une validation et pour déclencher des messages d’erreur personnalisés.

Vous pouvez utiliser la fonction Updated("Nom de champ") pour déterminer si un champ a changé. L’exemple de code suivant montre comment utiliser une instruction If pour déterminer si le champ PaidInFull a été modifié.

    If  Updated("PaidInFull")   Then 
     
        /* Perform actions based on changes to the field.   */ 
     
    End If 

Utilisez la propriété EstInsertion pour déterminer si l’événement Avant la modification a été déclenché par la création d’un enregistrement ou par la modification d’un enregistrement existant. La propriété EstInsertion a la valeur True si l'événement a été déclenché par un nouvel enregistrement, False si l'événement a été déclenché par la modification d'un enregistrement existant.

L'exemple de code suivant illustre la syntaxe d'utilisation de la propriété EstInsertion.

    If   [IsInsert] = True   Then 
     
       /*  Actions for validating a new record go here.       */ 
     
    Else 
     
       /* Actions for processing a changed record go here.    */ 
     
    End If

Vous pouvez accéder à la valeur précédente dans un champ en utilisant la syntaxe suivante.

    [Old].[Field Name]

Par exemple, pour accéder à la valeur précédente du champ QuantityInStock, utilisez la syntaxe suivante.

    [Old].[QuantityInStock]

Les valeurs précédentes sont supprimées de manière définitive lorsque l'événement Avant la modification se termine.

Vous pouvez annuler l'événement Avant la modification à l'aide de l'action DéclencherErreur. Lorsqu’une erreur est levée, les modifications contenues dans l’événement Avant la modification sont ignorées.

Le tableau suivant répertorie les commandes de macros qui peuvent être utilisées dans l’événement Avant la modification.

Type de commande

Command

Déroulement de programme

Comment, instruction de macro

Flux de programme

Group, instruction de macro

Flux de programme

If...Then...Else, bloc de macro

Bloc de données

Action de macro LookupEnregistrement

Action de données

ClearMacroError, action de macro

Action de données

OnError, action de macro

Action de données

RaiseError, action de macro

Action de données

SetField, action de macro

Action de données

SetLocalVar, action de macro

Action de données

StopMacro, action de macro

Pour créer une macro de données qui capture l’événement Avant la modification, procédez comme suit :

  1. Ouvrez la table pour laquelle vous souhaitez capturer l’événement Avant la modification.

  2. Sous l’onglet Table, dans le groupe Événements Avant, cliquez sur Avant la modification.

Une macro de données vide s’affiche dans le concepteur de macros

Exemple

L’exemple de code suivant utilise l’événement Before Change pour valider les champs État. Une erreur est levée si une valeur incorrecte est stockée dans le champ Resolution.

 
/* 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 
 

Pour afficher cet exemple dans le concepteur de macros, procédez comme suit.

  1. Ouvrez la table pour laquelle vous souhaitez capturer l’événement Avant la modification.

  2. Sous l’onglet Table, dans le groupe Événements Avant, cliquez sur Avant la modification.

  3. Sélectionnez le code dans l’exemple de code suivant, puis appuyez sur Ctrl+C pour le copier dans le Presse-papiers.

  4. Activez la fenêtre du concepteur de macros, puis appuyez sur 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]&lt;&gt;"3 - Resolved" And [Status]&lt;&gt;"4 - Closed"</Condition> 
          <Statements> 
            <Action Name="SetField"> 
              <Argument Name="Field">Resolution</Argument> 
              <Argument Name="Value">Null</Argument> 
            </Action> 
          </Statements> 
        </If> 
      </ConditionalBlock> 
    </Statements> 
  </DataMacro> 
</DataMacros>

L’exemple suivant montre comment utiliser l’action RaiseError pour annuler l’événement de macro de données Avant de modifier. Lorsque le champ AssignedTo est mis à jour, un bloc de données LookupRecord est utilisé pour déterminer si le technicien affecté est actuellement affecté à une demande de service ouverte. Si cette valeur est vraie, l’événement Before Change est annulé et l’enregistrement n’est pas mis à jour.

Exemple de code fourni parMicrosoft Access 2010 Programmer’s Reference.

    /* 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