ODBC调用失败违反主键

问题描述

sql的初学者,对于我犯的任何新手错误,我都表示歉意)

因此,基本上,我目前正在制作一个访问表,该表允许用户更新仓库中的库存。我正在使用ODBC链接数据库,可以在其中存储服务器内部的各种数据(数据库的配置将在下面显示) 但是,当我创建一个链接到列(IDDH)的组合框时,每当切换到另一列时,它都会自动弹出一个错误,指出它违反了PK约束。这时我不知道我做错了什么因为我已经在sql内部以一对多的关系连接了两个表,并在Microsoft Access上进行了连接(以防万一)。并在dbo.DonHang表(ProductID)中连接外键

这是我的配置 sql

enter image description here

访问中的关系

enter image description here

每当我切换到组合框中的另一列时,访问表单中的错误

enter image description here

如果您需要更多信息。请不要问。

解决方法

您直接在主表上建立一个表单。不是SQL联接。 然后,创建一个子窗体,其中包含一个记录的“许多”条目。再一次,该表格不是基于某些sql连接,而是仅基于链接的子表。

您不要尝试使用sql联接来解决Access中的这种数据编辑(使用sql server不会对此进行更改)。因此,您需要一个主表单(仅直接基于主(父)记录的一个链接表。然后有一个子表单,再次它又直接基于子链接表(再次不是某些sql查询)。

那么,要编辑主记录和子记录吗?您可以在Access中使用表单+子表单来实现此目标。而且此设置也将与sql server链接表一起很好地工作。

但是总而言之吗?您不要尝试编辑sql联接数据。您可以建立主表单,然后将子表单放到Access中的主/子数据的经典和常用编辑中。

如果您真的想将两者都编辑为一行?好吧,您通常可以编辑,但通常不允许添加行。但是,如果您创建的sql VIEW允许编辑行(可以在SSMS中进行测试/尝试),那么是否将该查询保存在View中作为视图?然后只需将视图链接到Access,就可以编辑一行,但是在添加新行等方面存在局限性。这实际上取决于您的目标。

但是,归根结底,SQL联接查询不能实现对主+子记录的编辑,而是可以单独编辑每个表或Access中的Form +子窗体。