父/子表单上的多对多关系限制了数据输入

Posted

技术标签:

【中文标题】父/子表单上的多对多关系限制了数据输入【英文标题】:Many-to-many relationship on parent/child form is limiting data entry 【发布时间】:2012-03-20 18:14:21 【问题描述】:

我有一个 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 个,令人作呕。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于父/子表单上的多对多关系限制了数据输入的主要内容,如果未能解决你的问题,请参考以下文章

sqlalchemy中的多对多自引用关系

Laravel 上的多对多问题关系

Spring Boot JPA多对多关系-Rest Web Service无法返回子对象

优化大数据集上的多对多关系查询

与关联对象在同一张表上的多对多关系

Laravel 多列上的多对多同步()