使用自定义表单,操作员可以在新创建的记录上更新字段。创建新记录时,新创建的记录中的字段将根据另一个字段中的值进行更新。
例如,字段,CustID根据主键更新,“PK”如下:CustID="NW"&Format([PK],"000000")
。
我可以使用更新查询执行此更新,但是,我希望在创建新记录后立即自动执行此更新。
我知道我可以写VBA代码,但我不愿意。我应该能够使用事件驱动的表宏,插入后执行此操作。出于某种原因,我无法让这个工作,现在在任何人要求在信任中心启用宏之前。如果我可以让它工作,我还有其他字段将根据运营商输入的值进行更新。
我已将表格宏设置如下:
After Insert
Edit Record
Set Field CustID="NW"&Format([PK],"000000")
我觉得这应该有效但没有任何反应。我正在大胆假设编辑记录编辑新创建的记录,这是正确的。 我找不到任何关于如何成功使用After Insert来修改新创建的记录中的字段的信息和/或示例。
问题1:可以这样做吗?
2:如果是这样,怎么样?
答案 0 :(得分:1)
Access Data Macro中刚刚插入的记录是只读的(就像在SQL Server或其他带触发器的解决方案中一样)。您应该在表USysApplicationLog中看到一个错误。但是,您可以查找刚刚插入的行,并对其进行修改。
您可以使用以下宏代码:
SetLocalVar
Name NewID
Expression =[PK]
For Each Record In MyTable
Where Condition =[PK]=[NewID]
EditRecord
SetField
Name CustID
Value ="NW"&Format([PK],"000000")
End EditRecord
宏XML将如下所示(您可以在宏窗口中粘贴XML以创建宏):
<?xml version="1.0" encoding="UTF-8"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
<DataMacro Event="AfterInsert">
<Statements>
<Action Name="SetLocalVar">
<Argument Name="Name">NewID</Argument>
<Argument Name="Value">[PK]</Argument>
</Action>
<ForEachRecord>
<Data>
<Reference>MyTable</Reference>
<WhereCondition>[PK]=[NewID]</WhereCondition>
</Data>
<Statements>
<EditRecord>
<Data />
<Statements>
<Action Name="SetField">
<Argument Name="Field">CustID</Argument>
<Argument Name="Value">"NW" & Format([PK],"000000")</Argument>
</Action>
</Statements>
</EditRecord>
</Statements>
</ForEachRecord>
</Statements>
</DataMacro>
</DataMacros>