Ms access 取消Access 2013中子窗体中的更改

Ms access 取消Access 2013中子窗体中的更改,ms-access,vba,ms-access-2013,Ms Access,Vba,Ms Access 2013,我在表单中有一个子表单。默认情况下,当我更改子窗体中的记录时,当我在子窗体外部单击时,该记录将自动保存。我在主窗体上添加了一个按钮,用于手动保存窗体和子窗体中的记录,因此我取消了子窗体退出时的保存,以避免写入冲突 Private Sub Form_BeforeUpdate(Cancel As Integer) Me.Undo Cancel = True End Sub 使用此代码,在子窗体外部单击不仅会取消保存,还会清除我在子窗体中输入的任何内容。这意味着如果不先取消子表单更改

我在表单中有一个子表单。默认情况下,当我更改子窗体中的记录时,当我在子窗体外部单击时,该记录将自动保存。我在主窗体上添加了一个按钮,用于手动保存窗体和子窗体中的记录,因此我取消了子窗体退出时的保存,以避免写入冲突

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.Undo
    Cancel = True
End Sub
使用此代码,在子窗体外部单击不仅会取消保存,还会清除我在子窗体中输入的任何内容。这意味着如果不先取消子表单更改,我将无法保存表单

如何取消在子窗体中的自动保存,同时保留所有编辑,直到它们退出主窗体

Me.Undo 
将撤消(子)表单中的任何数据编辑。删除那行就行了

这:

已足够取消更新

现在,您的需求的下一部分更难解决。每当您将数据绑定表单保留在Access中时,更改将被保存

为了防止这种情况,你有两个选择

1.)或者使用未绑定到任何记录源的未绑定表单。您需要使用查询/记录集读取数据,将其写入表单控件,然后使用VBA将任何修改的值写入数据库。-这不适用于连续/数据表表单

2.)或者创建一个与主表结构相同的临时表,并将子窗体绑定到该临时表。打开(主)表单时,将子表单的所有相关记录复制到临时表中。如果主窗体关闭/退出,则使用临时表中的任何更改更新真实数据表

将撤消(子)表单中的任何数据编辑。删除那行就行了

这:

已足够取消更新

现在,您的需求的下一部分更难解决。每当您将数据绑定表单保留在Access中时,更改将被保存

为了防止这种情况,你有两个选择

1.)或者使用未绑定到任何记录源的未绑定表单。您需要使用查询/记录集读取数据,将其写入表单控件,然后使用VBA将任何修改的值写入数据库。-这不适用于连续/数据表表单


2.)或者创建一个与主表结构相同的临时表,并将子窗体绑定到该临时表。打开(主)表单时,将子表单的所有相关记录复制到临时表中。如果主窗体已关闭/退出,则使用临时表中的任何更改更新真实数据表。

还有第三个选项:您可以将窗体上发生的所有数据事件包装到事务中,并显式提交(或回滚)事务基于窗体上的事件。第四个选项:将窗体绑定到断开连接的记录集。这允许您执行连续表单,在多个记录上维护未提交的值,并显式写入或拒绝每个记录。断开连接的记录集要求您使用ADO,并且,当您习惯它们时,它们非常棒,但有一点学习曲线。还有第三个选项:您可以在事务中包装表单上发生的所有数据事件,并显式提交(或回滚)事务基于窗体上的事件。第四个选项:将窗体绑定到断开连接的记录集。这允许您执行连续表单,在多个记录上维护未提交的值,并显式写入或拒绝每个记录。断开连接的记录集要求您使用ADO,并且,当您习惯它们时,它们非常棒,但有一点学习曲线。
Cancel = True