无法添加或更改记录,因为表'COMPANY'中需要相关记录

时间:2016-07-17 20:26:47

标签: ms-access database-design relational-database ms-access-2013 erd

我认为我的联系人列表数据库设计是正确的,但是有错误。 Access 2013告诉我:

  

您无法添加或更改记录,因为表'COMPANY'中需要相关记录

我是Access的新手,这是一个名为“Computer Concepts II”的课程。我已经完成了我的任务,并且一丝不苟地遵循了指示。本课程仅在线举行,我已经尝试过3次不同的方式,但未能得到教师的任何反馈。

以下是我尝试过的细节:

业务规则

  1. 一个人必须只有一个家庭,但一个家庭可以有很多人。
  2. 一个人可以为一家或零公司工作。
  3. 公司可以有零个或多个人。
  4. 对于MS Access, PERSON 表。
  5. 我的ERD图

    Eric Hepperle's ERD for Contact List Database in Access 2013

    建造表格

    1. 内置PERSON表。
    2. 建立公司表。
    3. 建立家庭表。
    4. 创建关系

      1. 在表格之间创建关系(参见附页截图)。对于可选性,请将PERSON设置为“强”表。
      2. 最初在FAMILY表中有ID-FAM和LNAME字段作为必需和索引。
      3. 最初有ID-PER,ID-FAM_FK,& PERSON表中的ID-COM_FK已编入索引。
      4. 最初将ID-COM作为COMPANY表中唯一的索引和必填字段。
      5. 在家长表中输入数据

        遇到'相关记录'错误

          • 如使用Access 2010文档中所示,我首先在父表(PERSON)中输入数据。但是,当我填完第一行中的所有字段并按下“向下箭头”键前进到下一行时,我收到一条错误消息说
        “您无法添加或更改记录,因为表'FAMILY'中需要相关记录”

        嗯,一个COMPANY条目是完全可选的,不需要任何方式,所以这有点令人困惑。我不确定我做错了什么或从哪里开始。我不知道在这堂课之前如何使用Access,但我觉得我现在有一个非常好的处理,我一丝不苟地按照说明操作。因此,我认为问题是某处设​​置错误。

4 个答案:

答案 0 :(得分:3)

解决!

在看到 Sergey S 的评论之前,我自己发现了这一点,但正如他所指出的那样,"默认"财产领域。在我发现解决方案后,我将以下内容发布到我班级的讨论区:

  

事实证明, Access正在自动设置默认值   我的外键[FK]为零(" 0")。我没有意识到,   但正在发生的事情是即使一个人没有被要求   有一家公司,因为" 0"在公司领域为我的人   记录导致错误的原因。原因?我怀疑   数据库正在寻找ID为" 0"的公司记录。以来   我的公司记录从2开始," 0"记录从未被发现,导致   错误。

解决方案

我解决这个问题的方法很简单   设置进入设计中我的2个外键的默认字段   查看,删除零,并确保没有默认值。要么,   另一种说法是:确保没有默认值   外键的值

我能够添加   每个表有3-4行数据,我甚至运行了一个基本查询来测试   数据库。它似乎工作得很好。

感谢所有贡献的人!

答案 1 :(得分:2)

如果您不需要将家人和/或公司链接到个人记录,请不要在ID-FAM_FKID-COM_FK字段中输入任何内容,请将其留空。在表定义中,这些字段不应具有默认值,Required属性应为No

如果您需要将Person与Family和/或Company链接,请先将数据输入Family和/或Company表,然后在Person表中添加或更新记录

答案 2 :(得分:1)

在表中声明FK意味着该表中列的子行必须出现在引用的表中。宣布FK没有其他理由。在SQL数据库中,当FK列保持NULL时(默认情况下),子行值不必出现在引用的表中。

因此,添加或编辑的Person行的非空白/非空FK值必须已经位于其引用表的某些行中。在评论中你说一个人必须有一个家庭,即需要人FK,即可以是非空白/非空,但不必有公司,即公司FK不是必需的,即可以为空/ NULL。因此,要添加Person行,您必须首先在Family中为其族添加一行,然后将Person行的ID-FAM值添加为ID-FAM-FK,并将ID-COM-FK添加为空/ NULL或ID - 公司在公司行中的-COM值。

错误消息不是很清楚。实际违规是在您离开之前,已添加或编辑行的人每行必须具有每个所需FK的值,因此必须为其引用的行,并且每个非必需FK的值为NULL 。但是错误消息只提到了关于缺少足够行的部分。

查询或更新数据库(包括JOINing)不需要FK(和其他约束)。它们用于DBMS的更新验证(和增强优化)。

答案 3 :(得分:0)

转到数据库,然后转到两个相关表之间的编辑关系。检查"级联更新相关字段"。现在更新或编辑将起作用,无需更新任何其他内容。