1

我正在尝试使用数据宏更新闭包表,每当将新记录插入主表时,都需要运行以下代码:

INSERT INTO tblClosure (parent_id, child_id, depth)
SELECT p.parent_id, c.child_id, p.depth+c.depth+1
FROM tblClosure AS p, tblClosure AS c
WHERE p.child_id=$PARENT_ID and c.parent_id=$CHILD_ID;

如您所见,可以使用嵌套循环执行此操作:

Iterate through tblClosure
For each record p with child_id = $PARENT_ID {
    Iterate through tblClosure
    For each record c with parent_id = $CHILD_ID {
        Insert (p.parent_id, c.child_id, p.depth + c.depth + 1) into tblClosure
    }
}

主表(tblNodes)和闭包表(tblClosure)都存储在后端数据库中,所以看起来数据宏应该能够做我想要的。

数据宏似乎也有函数Create Record (in...)For Each Record (in...)。但我根本无法让第二个开火。

这是我的代码(我已经定义temp_nodetemp_parent作为参数):

在此处输入图像描述

4

1 回答 1

1

当嵌套在 For Each Record 循环中时,创建记录宏命令将不起作用。请参阅此处(https://social.msdn.microsoft.com/Forums/office/en-US/f00a88f7-8cdc-48ec-93f9-ca3d698aa6f3/access-2010-datamacro-exception-quotcreaterecord-cannot-be-used-inside -of-a?forum=accessdev)为什么。

相反,我建议从您提供的插入语句的值部分在您的 Access 数据库中创建一个查询:

SELECT p.parent_id, c.child_id, p.depth+c.depth+1
FROM tblClosure AS p, tblClosure AS c
WHERE p.child_id=$PARENT_ID and c.parent_id=$CHILD_ID;

接下来,创建 tblClosure 表和刚刚创建的查询的联合查询。这会将两者显示在一起,就好像它们在一张桌子上一样。从这个联合查询中,您可以对其执行其他操作,就好像它是您的 Access 数据库中的一个表一样。

于 2020-10-14T15:07:31.567 回答