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

问题描述 投票:3回答:4

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

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

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

这是我尝试的事情的细分:

商业规则

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

我的ERD图

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

建造表格

  1. 内置PERSON表。
  2. 建有COMPANY表。
  3. 建造了FAMILY表。

建立了关系

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

在父母表中输入数据时遇到'相关记录'错误

    • 如使用Access 2010文档中所示,我首先在父表(PERSON)中输入数据。但是,当我完成第一行中的所有字段填充并按下“向下箭头”键前进到下一行时,我收到一条错误消息说
"You cannot add or change a record because a related record is required in table 'FAMILY'"

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

ms-access database-design relational-database ms-access-2013 erd
4个回答
3
投票

解决了!

在看到Sergey S的评论之前,我自己发现了这个,但正如他所指出的那样,“默认”属性字段中应该没有值。在我发现解决方案后,我将以下内容发布到我班级的讨论区:

事实证明Access正在自动设置我的外键[FK]的默认值为零(“0”)。我没有意识到这一点,但发生的事情是即使一个人不需要有公司,因为“0”在公司领域是我的人员记录,这是造成错误的原因。原因?我怀疑数据库正在寻找ID为“0”的公司记录。由于我的公司记录从2开始,从未找到“0”记录,导致错误。

SOLUTION

我解决这个问题的方法就是在设计视图中设置进入我的2个外键的默认字段,删除零,并确保没有默认值。或者,另一种方法是:确保外键没有默认值。

我能够为每个表添加3-4行数据,我甚至运行了一个基本查询来测试数据库。它看起来很完美。

感谢所有贡献的人!


2
投票

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

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


1
投票

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

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.