适用于: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]
当“删除后”事件结束时,已删除记录中包含的值将被永久删除。
以下宏命令可以在 “删除后” 事件中使用。
命令类型 |
命令 |
|---|---|
程序流 |
|
程序流 |
|
程序流 |
|
数据块 |
|
数据块 |
|
数据块 |
|
数据块 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
|
数据操作 |
若要创建可捕获“删除后”事件的数据宏,请执行以下步骤。
打开要捕获其“删除后”事件的表格。
在“表格”选项卡上的“后期事件”组中,单击“删除后”。
宏设计器中将显示一个空白数据宏。
示例
下面的代码示例使用“删除后”事件来在从“捐赠”(Donations) 表中删除记录时执行一些处理。 删除记录时,捐赠金额将从“捐款”“Received”表中的“捐款”“Received”字段和“捐赠者”表中的“TotalDonatedField”进行子分配。
单击此处查看可以粘贴到宏设计器中的宏副本。
若要在宏设计器查看此示例,请执行以下步骤。
打开要捕获其“删除后”事件的表格。
在“表格”选项卡上的“后期事件”组中,单击“删除后”。
选择下面列出的代码,然后按 Ctrl+C 将其复制到剪贴板。
激活宏设计器窗口,然后按 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