0

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

例如,字段 CustID 基于主键“PK”进行更新,如下所示:CustID="NW"&Format([PK],"000000").

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

我知道我可以编写 VBA 代码,但我不想这样做。我应该能够在插入后使用事件驱动的表宏来做到这一点。出于某种原因,我无法让它工作,现在在有人问宏在信任中心启用之前。如果我可以让它工作,我还有其他字段将根据操作员输入的值进行更新。

我已将表宏设置如下:

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

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

问题1:可以这样做吗?

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

4

1 回答 1

1

Access 数据宏中刚刚插入的记录是只读的(就像在 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>
于 2018-03-26T08:24:36.807 回答