基于查询的访问表单中的1:0..1关系

时间:2014-08-25 11:07:53

标签: sql forms ms-access ms-access-2007

我有一个包含多个相关表的Access 2007数据库。一些关系是1:0..1。

我还有一个查询来显示表A中的所有记录和表B中的所有相关记录(如果有的话)。它看起来像这样(实际查询更难,但对于实际问题,这应该足够了):

SELECT
    A.foo,
    A.bar,
    B.lorem,
    C.ipsum,
    C.dolor
FROM ((
    A
    LEFT JOIN
        B
        ON A.ID = B.[A: ID]
    )
    LEFT JOIN
        C
        ON A.ID = C.[A: ID]
    )

ORDER BY
    A.ID;

据我所知,此查询按预期工作。

此外,我有一个表格用数据填充这些表格。

以前使用表单插入数据效果很好,但只显示了一些记录(A和B以及A和C之间具有1:1关系的记录)。

然后我将RecordSource更改为上面提到的查询(就像@ashareef suggested)。现在所有记录都显示出来(正如预期的那样),但我不能再在B.lorem,B.ipsum和C.dolor字段中输入数据 - 当我这样做时,我收到错误

  

索引或主键不能包含Null值。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

您无法更新回选择语句。它不知道将值推回到何处。

例如,如果您没有在表B上获得匹配,意味着B.lorem为NULL,但是您尝试更新lorem,那么它不够聪明,无法创建B中的全新记录,具有适当的值。

我建议您使用子窗体,或者使用某种VBA技巧来创建记录。

答案 1 :(得分:0)

索引或键不能为零或为null - 如果未插入任何值,则其默认值为null。检查表格中的内容以及您尝试插入的内容。