【发布时间】:2017-01-09 21:30:31
【问题描述】:
所以我在 Acess 2010 中有一个表单,其中包含两个子表单来管理一对多关系,对于项目和任务,它们绑定到 SQL Server 上的两个链接表,因此每当我加载项目时,任务都会列在子窗体。
最近,每当我从主窗体上的字段移动到子窗体的任何区域时,都会遇到错误on primary key violation。这告诉我主表单正在尝试保存它加载的任何内容,但它不是 UPDATE,而是尝试插入。
我看不到可以执行该特定命令的代码或事件(例如更新之前或之后)。表单上有一个保存按钮,这个按钮使用DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70,它会产生同样的错误。
有没有办法指示 Access 使用 UPDATE 而不是 INSERT?
我一直在四处寻找,但似乎没有找到任何相关的解决方法。
谢谢大家!
编辑:我尝试删除链接表上的主键并且错误消失了,但正如怀疑的那样,每次我移动到不同的记录或单击子表单时它都会插入重复项。因此,如果有人对记录导航行为以及如何配置有任何线索,我将不胜感激!
【问题讨论】:
-
如果您在添加模式下打开表单,它将默认为插入。同样在编辑中打开,默认为更新。您还没有显示任何代码或您的表单是如何链接的,所以我们在这里帮不上什么忙
-
实际上,您提供的帮助比您想象的要多,我对 Access 表单没有太多经验,当我加载表单时,我可以看到主表单代码中没有要执行的操作没有指定方法,所以我尝试使用
DoCmd.OpenForm stDocName, , , stLinkCriteria, acFormEdit来尝试您提到的内容(我不知道这一点,谢谢)但似乎它并没有改变大小写......每当您单击时,表单仍然会抛出错误子窗体上的任何位置或尝试移动到下一条记录...它仍然尝试插入然后违反 PK。 -
顺便说一句,我正在使用绑定表单。
-
检查当您尝试输入新值时两个表之间的关系键没有被更改。例如,如果您有一个 FK 在您尝试添加或编辑值时会自动填充到子表单上,请确保它仍在引用父表单上的正确键。
-
谢谢 Erick,我已经从表单中删除了子表单,表格没有 FK,所以现在我只是将我的主表单绑定到主表并且它有它的 PK(它的类型是 text btw ...我不喜欢但我无法更改它)并且问题仍然存在,每次我尝试移动到表单上的另一条记录时它都会尝试插入。
标签: ms-access vba ms-access-2010 subform