我有两个相关的表格,results
和userID
。
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
具有相同的值。
我认为这可能是数据库损坏问题,因此我创建了一个空白数据库并将所有表导入其中。但我仍然有同样的错误。这是怎么回事?
答案 0 :(得分:1)
两个表都包含一个名为LanID
的文本字段。您正在此关系中使用该字段,这将强制引用完整性:
您遇到的问题是由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)
如果使用的是参数查询,请确保它们的顺序与要修改的表和创建的查询的顺序相同。您可能只有一个参数可插入冲突的数据。参数按其创建顺序使用...而不是参数名称。我遇到了同样的问题,我所要做的就是切换它们的顺序,以便它们与查询匹配。这是一个旧线程,所以我希望这对刚刚遇到此问题的人有所帮助。