【问题标题】:Many-to-many relationship on parent/child form is limiting data entry父/子表单上的多对多关系限制了数据输入
【发布时间】:2023-04-08 09:09:01
【问题描述】:

我有一个 Access 2003 前端,以前使用 Access 后端没有问题。我最近将 Access 后端切换为使用 SQL Server 2005,但我还没有弄清楚最后一个问题 - 任何帮助将不胜感激。

我有两个处于多对多关系的表:

tblMembership <--> tblLinkPersonMembership <--> tblPerson

主键字段是membershipId 和personId,链接表包含两者,没有其他内容。

Access 应用程序有一个使用tblMembership 作为记录源的表单。它有一个记录源为

的子表单
SELECT * 
FROM tblPerson INNER JOIN tblLinkPersonMembership 
    ON tblPerson.personId=tblLinkPersonMembership.personId;

当使用 Access (2003) 数据库作为后端时,这工作得很好。现在后端是 SQL Server 2005,我可以在子表单上输入 2 个人记录,但是当给定成员的第三个人记录尝试保存时,我收到以下错误:

The Microsoft Jet database engine cannot find a record in the table 
'tblPerson' with key matching field(s) 'tblLinkPersonMembership.personId'.

如果我关闭表单,重新打开它并返回到该成员(现在有 2 个人与之关联),然后我可以再输入 2 个人(第 3 个人和第 4 个人),但如果我尝试输入第五个人,我得到同样的错误。我可以关闭表单,重新打开,然后再添加 2 个,令人作呕。

我有点难过,到目前为止我所做的研究还没有发现任何东西。有什么帮助吗?

【问题讨论】:

    标签: sql-server ms-access many-to-many


    【解决方案1】:

    我会先让 Access 表单和 SQL 并排打开。由于您可以输入 2(?) 条记录而没有 (?) 问题,因此我将输入一条记录并查看数据库(三个表)以查看那里的数据类型。然后,进行第二次记录。主要关注点是PK/FK。此外,我会将所有关键列放在 Access 表单(PK、FK)上,以查看它们是如何填写的。

    然后父/子形成关系。使用您的“SELECT *”,您将获得两个 personId 列。只要您使用 tableName.personId,应该没问题,但也值得检查。例如。确保在 tblLinkPersonMembership 中更新 FK 时没有编辑 tblPerson 的 PK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 2021-04-15
      • 1970-01-01
      相关资源
      最近更新 更多