Freigeben über


Makroereignis "Vor Änderung"

Gilt für: Access 2013, Office 2013

Das Ereignis Vor Änderung tritt ein, wenn ein Datensatz geändert wird, jedoch bevor der Commit für die Änderung erfolgt ist.

Hinweis

Das Ereignis Vor Änderung ist nur in Datenmakros verfügbar.

Hinweise

Mit dem Ereignis Vor Änderung führen Sie sämtliche Aktionen vor dem Ändern eines Datensatzes aus. Das Ereignis Vor Änderung wird häufig verwendet, um Überprüfungen auszuführen und benutzerdefinierte Fehlermeldungen auszugeben.

Mithilfe der Funktion Aktualisiert(„Feldname“) können Sie feststellen, ob sich ein Feld verändert hat. Das folgende Codebeispiel zeigt, wie sie mithilfe einer If-Anweisung ermitteln, ob das Feld PaidInFull geändert wurde.

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

Mit der IstEingefügt-Eigenschaft ermitteln Sie, ob das Ereignis Vor Änderung durch das Erstellen eines neuen Datensatzes oder eine Änderung an einem vorhandenen Datensatz ausgelöst wurde. Die IstEingefügt -Eigenschaft enthält True, wenn das Ereignis durch einen neuen Datensatz ausgelöst wurde, und False, wenn das Ereignis durch eine Änderung an einem vorhandenen Datensatz ausgelöst wurde.

Das folgende Codebeispiel veranschaulicht die Syntax der IstEingefügt -Eigenschaft.

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

Mit der folgenden Syntax können Sie auf einen vorherigen Wert in einem Feld zugreifen.

    [Old].[Field Name]

For example, to access the previous value of the QuantityInStock field, use the following syntax.

    [Old].[QuantityInStock]

Am Ende des Ereignisses Vor Änderung werden die vorherigen Werte dauerhaft gelöscht.

Mit der AuslösenFehler -Aktion können Sie das Ereignis Vor Änderung abbrechen. Bei einem Fehler werden die Änderungen im Ereignis Vor Änderung verworfen.

In der folgenden Tabelle sind Makros ausgeführt, die im Ereignis Vor Änderung verwendet werden können.

Befehlstyp

Befehl

Programmablauf

Kommentar-Makroanweisung

Programmablauf

Gruppieren-Makroanweisung

Programmablauf

Wenn...Dann...Sonst-Makroblock

Datenblock

NachschlagenDatensatzmakroaktion

Datenaktion

ClearMacroError-Makroaktion

Datenaktion

OnError-Makroaktion

Datenaktion

RaiseError-Makroaktion

Datenaktion

SetField-Makroaktion

Datenaktion

SetLocalVar-Makroaktion

Datenaktion

StopMacro-Makroaktion

Zum Erstellen eines Datenmakros, mit dem das Ereignis Vor Änderung erfasst wird, führen Sie die folgenden Schritte aus.

  1. Öffnen Sie die Tabelle, für die Sie das Ereignis Vor Änderung erfassen möchten.

  2. Klicken Sie auf der Registerkarte Tabelle in der Gruppe Vorabereignisse auf Vor Änderung.

Im Makro-Designer wird ein leeres Datenmakro angezeigt.

Beispiel

Im folgenden Codebeispiel wird das Before Change-Ereignis verwendet, um die Statusfelder zu überprüfen. An error is raised if an inappropriate value is contained in the Resolution field.

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

Zum Anzeigen dieses Beispiels im Makro-Designer gehen Sie folgendermaßen vor:

  1. Öffnen Sie die Tabelle, für die Sie das Ereignis Vor Änderung erfassen möchten.

  2. Klicken Sie auf der Registerkarte Tabelle in der Gruppe Vorabereignisse auf Vor Änderung.

  3. Wählen Sie den Code im folgenden Codebeispiel aus, und drücken Sie dann STRG+C , um ihn in die Zwischenablage zu kopieren.

  4. Aktivieren Sie das Makro-Designer-Fenster, und drücken Sie dann STRG+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>

Das folgende Beispiel zeigt, wie Sie die Aktion RaiseError verwenden, um das Datenmakroereignis "Before Change" abzubrechen. Wenn das Feld AssignedTo aktualisiert wird, wird ein LookupRecord-Datenblock verwendet, um zu bestimmen, ob der zugewiesene Techniker derzeit einer offenen Serviceanfrage zugewiesen ist. Wenn dies zutrifft, wird das Ereignis Before Change abgebrochen, und der Datensatz wird nicht aktualisiert.

Der Beispielcode stammt von:Microsoft 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