基于查询的表单时,删除会影响哪些表?

时间:2010-04-22 17:52:21

标签: forms ms-access

MS Access 2003 中,我有一个表单,其记录源等于涉及INNER JOIN的查询。连接位于位置表和容器表之间。容器是存储在特定位置的对象,每个位置和容器都由ID值指定。

SELECT DISTINCTROW Container.Container_ID, Location.Location_ID
FROM Location INNER JOIN Container 
ON Location.[Location_ID] = Container.[Location_ID]

我想弄清楚的是......当我根据上述查询删除表格中的记录(使用表单导航控件)哪些表受影响? Container和Location表中的记录是否已删除,或者仅在位置表中?

2 个答案:

答案 0 :(得分:1)

如果没有定义关系,您将从Container中删除当前行并保持Location不变。

但是,我认为您应该添加关系并强制执行参照完整性,以确保您无法删除仍存储容器的位置。否则,您可以使用Container记录,该记录引用不再存在的Location_ID。这种关系可能对此表单和查询没有帮助,但它可以防止其他情况下的错误。

还有其他方法可以设计您的表单,以便更容易理解哪些记录将从哪里删除。您可以将主窗体基于Location,并包含基于Container的子窗体。在属性中将Location_ID设置为链接主/子字段。然后,对于主窗体中显示的Location_ID,存储在该位置的所有容器将显示在子窗体中。使用子窗体删除所需的容器。

答案 1 :(得分:0)

这取决于您是否在表之间建立了关系,并且为该关系启用了“级联删除相关表”的设置。

如果您有关系,并且已启用级联删除,则肯定会删除关联表中的记录。

如果在两个表之间强制执行参照完整性,如果您尝试删除父记录而不先删除所有关联的子记录,Access将会发出警告。

我不清楚如果表格的查询中存在两个表并且请求删除,并且关闭了级联删除,表单中会发生什么。但这很容易测试。

http://office.microsoft.com/en-us/access/ha011739511033.aspx