ms-access - "The data has been changed"从主窗体步进到子窗体时出错

标签 ms-access vba odbc ms-access-2007

我正在使用 SQL Server 迁移助手 (SSMA) 将 Access 数据库迁移到 SQL Server。 Access 应用程序将继续使用,但使用链接表而不是本地表。

我在使用包含多个子表单的表单进行迁移后测试时遇到了问题。

测试步骤:

1) 在主窗体中编辑一个字段;

2) 将焦点转移到子表单中的某个字段;

3) 尝试编辑子表单中的字段。

结果:弹出错误消息:“数据已更改。在您尝试保存更改之前,另一个用户编辑了此记录并保存了更改。”

消除错误消息后,可以编辑子表单中的字段。如果未编辑主表单中的字段,则可以编辑子表单而不显示错误消息。

关于什么可能导致此错误的任何想法?

我已经尝试在主窗体上的子窗体控件的 Enter 事件处理程序中保存主窗体记录(即此事件发生在主窗体上,当输入包含子窗体的控件时,而不是在子窗体本身上) .没有任何区别。我尝试在同一个子表单控件 Enter 事件中重新查询主表单,但这不起作用 - 重新查询主表单将焦点从子表单移开,因此无法对其进行编辑。

MS 论坛建议在子表单的 After_Update 事件中使用 Me.Parent.Requery。那也没有用。

当我进入子窗体时,SQL Profiler 显示了一个更新语句,更新主窗体下面的表。没有其他语句 Access 数据库来修改数据。

我注意到一件有趣的事情:主窗体的记录源实际上是一个将两个表连接在一起的选择语句。主表单包含可以更新记录源中每个表中列的字段。更新关系中子表的主表单中的编辑字段不会导致“数据已更改”错误。该错误仅在编辑更新关系中父表的字段时发生。我尝试了更新两个表中每一个中不同列的字段。结果一致:编辑父表中的记录会导致错误,编辑子表中的记录不会。

子表单和主表单之间的链接将子表单表中的一列连接到主表单记录源中子表中的一列。

顺便说一下,主窗体记录源中的表实际上以 1:1 的关系联接(子表中的一条记录对应父表中的每条记录)。子表只是父表的扩展表。

如果我从头开始,我个人不会像这样设计系统,但这是我必须使用的,我希望有一些相当简单的修复,不需要对表格或表格进行重大重新设计(假设主窗体和子窗体各有 100 多个控件)。

最佳答案

经过多次反复试验,我解决了这个问题。在主窗体上子窗体控件的输入事件处理程序中,我重新查询了子窗体本身。

例如在主窗体上:

Private Sub Subform1_Enter()
    Me.Subform1.Form.Requery
End Sub

我不知道这为什么有效,只是确实如此。

关于ms-access - "The data has been changed"从主窗体步进到子窗体时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16217844/

相关文章:

vba - Microsoft Access - 缺少对 acrobat.tlb 的引用

ms-access - 使用自定义功能区时,是否可以防止MS Access自动更改选定的功能区选项卡?

excel - 如何使用 VBA 从 MS-Excel (2010) 查询 MS-Access 表

excel - 如何访问 PivotCell.RowItem(n) 的字段名称?

未找到 Windows-XP ODBC 管理

ms-access - Access : Move to previous record until BOF

excel - 使用 vba 将数据从一张表复制到另一张表时出错

vba - 如何将32位Excel VBA代码转换为在64位Excel上运行?

sql - 如何编写从 SQL 数据库返回值的 Excel 函数?

mysql - 如何清理 ODBC 数据库输入?