访问2016表格宏在新创建的记录中插入修改字段后

时间:2018-03-26 01:46:51

标签: ms-access ms-access-data-macro

使用自定义表单,操作员可以在新创建的记录上更新字段。创建新记录时,新创建的记录中的字段将根据另一个字段中的值进行更新。

例如,字段,CustID根据主键更新,“PK”如下:CustID="NW"&Format([PK],"000000")

我可以使用更新查询执行此更新,但是,我希望在创建新记录后立即自动执行此更新。

我知道我可以写VBA代码,但我不愿意。我应该能够使用事件驱动的表宏,插入后执行此操作。出于某种原因,我无法让这个工作,现在在任何人要求在信任中心启用宏之前。如果我可以让它工作,我还有其他字段将根据运营商输入的值进行更新。

我已将表格宏设置如下:

After Insert
Edit Record
Set Field CustID="NW"&Format([PK],"000000")

我觉得这应该有效但没有任何反应。我正在大胆假设编辑记录编辑新创建的记录,这是正确的。 我找不到任何关于如何成功使用After Insert来修改新创建的记录中的字段的信息和/或示例。

问题1:可以这样做吗?

2:如果是这样,怎么样?

1 个答案:

答案 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" &amp; Format([PK],"000000")</Argument>
                     </Action>
                  </Statements>
               </EditRecord>
            </Statements>
         </ForEachRecord>
      </Statements>
   </DataMacro>
</DataMacros>