父/子表单上的多对多关系限制了数据输入
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。
【讨论】:
以上是关于父/子表单上的多对多关系限制了数据输入的主要内容,如果未能解决你的问题,请参考以下文章