【问题标题】:"You cannot add or change a record because a related record is required", but related record exists?“您无法添加或更改记录,因为需要相关记录”,但相关记录存在?
【发布时间】:2019-03-05 18:41:59
【问题描述】:

我有两个相关的表,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

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

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

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

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

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

【问题讨论】:

  • 你的组合框及其绑定列的行源是什么?
  • @Zaider:行源为SELECT [UserID].[ID], [UserID].[UserID] FROM UserID ORDER BY [UserID];,绑定列为1。
  • 我无法复制这个问题。您可以将您的数据库副本上传到文件共享站点并给我们一个链接吗?
  • @HansUp,我现在得走了。我明天会上传一个经过清理的版本。
  • @HansUp,我已经在this link 上分享了它。注意UserID在这个版本中改为LanID,我已经删除了LanID.Name列。

标签: ms-access


【解决方案1】:

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

您面临的问题是由于查找字段属性。这是行来源:

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

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

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

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

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

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多