After Delete 宏事件

适用于:Access 2013、Office 2013

在删除记录之后会发生“删除后”事件。

注意

“删除后”事件仅适用于数据宏。

备注

使用“删除后”事件可以执行您希望在删除记录时发生的任何操作。 “删除后”通常用于强制实施业务规则、工作流,更新聚合总计和发送通知。

发生 “删除后”事件时 ,已删除记录中包含的值仍然可用。 你可能想要使用已删除的值来递增或递减总计、创建审核跟踪或与 WhereCondition 参数中的现有值进行比较。

可以使用 Updated("Field Name") 函数确定某个字段是否已更改。 下面的代码示例演示了如何使用 If 语句来确定 PaidInFull 字段是否已更改。

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

可以使用以下语法访问已删除记录中的某个值。

[Old].[Field Name]

例如,若要访问已删除记录中的 QuantityInStock 字段的值,请使用以下语法。

[Old].[QuantityInStock]

当“删除后”事件结束时,已删除记录中包含的值将被永久删除。

以下宏命令可以在 “删除后” 事件中使用。

命令类型

命令

程序流

Comment 宏语句

程序流

Group 宏语句

程序流

If...Then...Else 宏程序块

数据块

CreateRecord 宏操作

数据块

EditRecord 宏操作

数据块

ForEachRecord 宏操作

数据块

LookupRecord 数据块

数据操作

CancelRecordChange 宏操作

数据操作

ClearMacroError 宏操作

数据操作

DeleteRecord 宏操作

数据操作

ExitForEachRecord 宏操作

数据操作

LogEvent 宏操作

数据操作

OnError 宏操作

数据操作

RaiseError 宏操作

数据操作

RunDataMacro 宏操作

数据操作

SendEmail 宏操作

数据操作

SetField 宏操作

数据操作

SetLocalVar 宏操作

数据操作

StopAllMacros 宏操作

数据操作

StopMacro 宏操作

若要创建可捕获“删除后”事件的数据宏,请执行以下步骤。

  1. 打开要捕获其“删除后”事件的表格。

  2. “表格”选项卡上的“后期事件”组中,单击“删除后”

宏设计器中将显示一个空白数据宏。

示例

下面的代码示例使用“删除后”事件来在从“捐赠”(Donations) 表中删除记录时执行一些处理。 删除记录时,捐赠金额将从“捐款”“Received”表中的“捐款”“Received”字段和“捐赠者”表中的“TotalDonatedField”进行子分配。

单击此处查看可以粘贴到宏设计器中的宏副本。

若要在宏设计器查看此示例,请执行以下步骤。

  1. 打开要捕获其“删除后”事件的表格。

  2. “表格”选项卡上的“后期事件”组中,单击“删除后”

  3. 选择下面列出的代码,然后按 Ctrl+C 将其复制到剪贴板。

  4. 激活宏设计器窗口,然后按 Ctrl+V。

    <?xml version="1.0" encoding="UTF-16" standalone="no"?> 
    <DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/04/application"> 
      <DataMacro Event="AfterDelete"> 
        <Statements> 
          <Comment>Initialize a variable and assign the old</Comment> 
          <Action Name="SetLocalVar"> 
            <Argument Name="Name">varAmount</Argument> 
            <Argument Name="Value">[Old].[Amount]</Argument> 
          </Action> 
          <ConditionalBlock> 
            <If> 
              <Condition>Not (IsNull([Old].[CampaignID]))</Condition> 
              <Statements> 
                <ForEachRecord> 
                  <Data> 
                    <Reference>Campaigns</Reference> 
                    <WhereCondition>[ID]=[Old].[CampaignID]</WhereCondition> 
                  </Data> 
                  <Statements> 
                    <EditRecord> 
                      <Data /> 
                      <Statements> 
                        <Action Collapsed="true" Name="SetField"> 
                          <Argument Name="Field">[DonationsReceived]</Argument> 
                          <Argument Name="Value">[DonationsReceived]-[varAmount]</Argument> 
                        </Action> 
                      </Statements> 
                    </EditRecord> 
                  </Statements> 
                </ForEachRecord> 
              </Statements> 
            </If> 
          </ConditionalBlock> 
          <ConditionalBlock> 
            <If> 
              <Condition>Not (IsNull([Old].[DonorID]))</Condition> 
              <Statements> 
                <ForEachRecord> 
                  <Data> 
                    <Reference>Donors</Reference> 
                    <WhereCondition>[ID]=[Old].[DonorID]</WhereCondition> 
                  </Data> 
                  <Statements> 
                    <EditRecord> 
                      <Data /> 
                      <Statements> 
                        <Action Name="SetField"> 
                          <Argument Name="Field">[TotalDonated]</Argument> 
                          <Argument Name="Value">[TotalDonated]-[varAmount]</Argument> 
                        </Action> 
                      </Statements> 
                    </EditRecord> 
                  </Statements> 
                </ForEachRecord> 
              </Statements> 
            </If> 
          </ConditionalBlock> 
        </Statements> 
      </DataMacro> 
    </DataMacros>
    SetLocalVar 
                    Name    varAmount 
              Expression   =[Old].[Amount] 
     
    If   Not(IsNull([Old].[CampaignID]]))   Then 
     
         For Each Record In     Campaigns 
            Where Condition     =[ID]=[Old].[CampaignID] 
                      Alias 
            EditRecord 
                      Alias 
                  SetField   ([DonationsReceived], [DonationsReceived] - [varAmount]) 
            End EditRecord 
     
    End If 
     
    If   Not(IsNull([Old].[DonorID]]))   Then 
     
         For Each Record In    Donors 
            Where Condition     =[ID]=[Old].[DonorID] 
                      Alias 
            EditRecord 
                      Alias 
     
              SetField 
                             Name   [TotalDonated] 
                            Value   =[TotalDonated]-[varAmount] 
            End EditRecord 
    End If