2

例如,我有一个表格,其中包含通过公共相对 ID 的人与人之间的一对多关系,用于在地址处将家庭分组在一起。

相对表非常简单:

REL_PK autonumber, primary key
REL_ID number - non-unique, matching numbers mean related
PERSON_ID - ID of a record on the person table

每个关系至少需要两行才能完整;我想设置一个删除后表宏,如果倒数第二个记录被删除,它将删除具有给定相对 ID 的最后一个剩余记录。

换句话说:“从 REL 表中删除一行后,如果只保留一条具有给定 REL_ID 的记录,则也将其删除。”

我可以将 VBA 放在按钮代码中,以便在此表上简单地运行删除查询,以查找单独的行并删除它们,但我认为设置触发器会更好,因为我将来可能会在其他地方操作这些记录而忘记运行清理查询。

我已经检查过了,似乎不可能从表宏触发更新查询。

4

1 回答 1

1

以下After Delete数据宏似乎对我有用:

删除后.png

如果您愿意,您显然可以将以下 XML 粘贴 ( Ctrl+ V) 到数据宏窗口中,以节省一些点击和输入...

<?xml version="1.0" encoding="utf-16" standalone="no"?>
<DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
  <DataMacro Event="AfterDelete">
    <Statements>
      <Action Name="SetLocalVar">
        <Argument Name="Name">RemainingCount</Argument>
        <Argument Name="Value">DCount(&quot;*&quot;,&quot;Relative&quot;,&quot;REL_ID=&quot; &amp; [Old].[REL_ID])</Argument>
      </Action>
      <ConditionalBlock>
        <If>
          <Condition>[RemainingCount]=2</Condition>
          <Statements>
            <LookUpRecord>
              <Data Alias="DeleteMe">
                <Reference>Relative</Reference>
                <WhereCondition>[REL_ID]=[Old].[REL_ID] And [REL_PK]&lt;&gt;[Old].[REL_PK]</WhereCondition>
              </Data>
              <Statements>
                <Action Name="DeleteRecord">
                  <Argument Name="Alias">DeleteMe</Argument>
                </Action>
              </Statements>
            </LookUpRecord>
          </Statements>
        </If>
      </ConditionalBlock>
    </Statements>
  </DataMacro>
</DataMacros>
于 2013-10-22T08:59:48.993 回答