“您无法添加或更改记录,因为需要相关记录”,但相关记录是否存在?

时间:2013-09-13 18:44:11

标签: ms-access

我有两个相关的表格,resultsuserID

results看起来像这样:

+----+--------+--------+
| ID | userID | result |
+----+--------+--------+
|  1 | abc    |    124 |
|  2 | abc    |    792 |
|  3 | def    |    534 |
+----+--------+--------+

userID看起来像这样:

+----+--------+---------+
| id | userID |  name   |
+----+--------+---------+
|  1 | abc    | Angela  |
|  2 | def    | Gerard  |
|  3 | zxy    | Enrico  |
+----+--------+---------+

results中,userID字段是查找字段;它存储userID.id,但组合框有userID.userID作为选择。

当我尝试通过设置results组合框并输入结果值来将数据输入userID时,我收到以下错误消息:

You cannot add or change a record because a related record
is required in table `userID`.

这很奇怪,因为我专门选择userID组合框中提供的值。

奇怪的是,results中已有大约100行数据与userID具有相同的值。

我认为这可能是数据库损坏问题,因此我创建了一个空白数据库并将所有表导入其中。但我仍然有同样的错误。这是怎么回事?

2 个答案:

答案 0 :(得分:1)

两个表都包含一个名为LanID的文本字段。您正在此关系中使用该字段,这将强制引用完整性:

Relationships Diagram

您遇到的问题是由Lookup字段属性引起的。这是行源:

SELECT [LanID].ID, [LanID].LanID FROM LanID ORDER BY [LanID]; 

但是存储的值(Bound Column属性)是SELECT语句中的 first 列,它是Long Integer [LanID].ID。因此,该数字不会满足关系,这需要results.LanID = [LanID].LanID

您必须更改关系或更改“查找”属性,以便两者都引用相同的字段值。

但如果是我,我会删除Lookup,因为简单的操作(例如这个)在涉及Lookup字段时会变得不必要地混淆。将results.LanID设为纯数字或文本字段。如果您想要某种用户友好的数据输入下拉菜单,请使用组合框或列表框构建表单。

有关查找字段的其他参数,请参阅The Evils of Lookup Fields in Tables

答案 1 :(得分:0)

如果使用的是参数查询,请确保它们的顺序与要修改的表和创建的查询的顺序相同。您可能只有一个参数可插入冲突的数据。参数按其创建顺序使用...而不是参数名称。我遇到了同样的问题,我所要做的就是切换它们的顺序,以便它们与查询匹配。这是一个旧线程,所以我希望这对刚刚遇到此问题的人有所帮助。