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

时间:2012-03-20 18:14:22

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

我有一个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人),但如果我尝试输入第5个人,我得到同样的错误。我可以关闭表单,重新打开,再添加2个,这是一个令人作呕的内容。

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

1 个答案:

答案 0 :(得分:0)

我首先要将Access表单和SQL并排打开。由于您可以输入没有(?)问题的2(?)记录,我会输入一条记录并查看数据库(三个表)以查看哪些数据到达那里。然后,为第二个记录。主要焦点是PKs / FKs。此外,我会将所有关键列放在Access窗体(PK,FK)上以查看它们是如何填充的。

然后父母/子女形成关系。使用“ SELECT * ”,您将获得两个personId列。只要你使用 tableName.personId ,你应该没事,但它也值得一试。例如。如果您想在 tblLinkPersonMembership 中更新FK,请确保您没有编辑 tblPerson 的PK。