使用另一个字段的值构建字段查找查询

时间:2009-10-14 20:27:13

标签: ms-access ms-access-2007

创建一个具有访问权限的迷你数据库,我遇到了这个问题:

对于背景,我有两个表:

 Table: Items        and    Table: Actions
ID(PK)    Name             ID(PK)    Name
------------------         ----------------
 1        Thing1            1        Move
 2        Thing2            2        Delete
 3        Thing3

我创建了一个查询,列出了每个项目的可用操作:

 Query: AvailableActions
Item_ID    Action_ID
------------------------
 1          2                 //Thing1 can be deleted
 2          1                 //Thing2 can be moved
 2          2                 //Thing1 can be deleted
 (no more records)

现在我要填充第三个列出对象历史记录的表

 Table: History
ID(PK)    Item_ID    Action_ID
----------------------------------
 1         1          2
 2         1          2
 3         2          1
 4         2          2 

所以我正在尝试为Action_ID创建一个查找字段,其中我只能选择所选项的允许值。但是,无论是在设计模式还是SQL模式下,我都无法获得该字段的值。

你有任何提示吗?

3 个答案:

答案 0 :(得分:0)

在整理用户界面(拖地......)之前,请确保您在表格上有所需的约束(...修复泄漏),例如ANSI-92 Query Mode SQL DDL:

ALTER TABLE History ADD
   CONSTRAINT fk__history__AvailableActions
   FOREIGN KEY (Item_ID, Action_ID)
   REFERENCES AvailableActions (Item_ID, Action_ID);

...假设您已在AvailableActions (Item_ID, Action_ID)上拥有所需的唯一约束。

答案 1 :(得分:0)

如果您想要一个可以应用于项目X的操作列表,那么您可以使用以下命令生成:

SELECT Actions.ID, Actions.Name FROM Actions INNER JOIN AvailableActions 
    ON Actions.ID = AvailableActions.ActionID WHERE Actions.Item_ID = X

当你谈到删除“Thing 1”时,你是否真的打算从表中删除记录,或者为其他东西(如磁盘文件)记录代理。如果你真的删除它,你将无法在Items和AvailableActions之间建立PK / FK关系,如果这是你的意图。

答案 2 :(得分:0)

正如我在评论中所说,我实现这一目标的唯一方法是在“项目”表单中添加子表单。 (无法仅使用结构指定此项,因为那些Available_actions是根据相同的历史记录表计算的)