从Access数据宏运行SQL查询

时间:2015-06-29 10:31:53

标签: ms-access hierarchical-data transitive-closure-table ms-access-data-macro

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

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
    }
}

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

temp_node

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

数据宏 似乎还具有创建记录(在...中)对于每个记录(在...中)的功能。但我根本无法解决第二个问题。

这是我的代码(我已将temp_parentcmd定义为参数):

enter image description here

1 个答案:

答案 0 :(得分:1)

“创建记录”宏命令嵌套在“每个记录”循环中时将不起作用。有关原因,请参见此处(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数据库中的表一样。