在 Access 2013 中取消子窗体中的更改

Cancel changes in a subform in Access 2013

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

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.Undo
    Cancel = True
End Sub

使用此代码,在子表单外部单击不仅会取消保存,还会清除我在子表单中输入的所有内容。这意味着我必须先取消子表单更改才能保存表单。

如何取消子表单中的自动保存,同时保留任何编辑直到它们退出主表单?

Me.Undo 

将撤消(子)表单中的任何数据编辑。只需删除该行。

这个:

Cancel = True

足以取消更新。

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

要防止这种情况,您有两个选择。

1.) 要么使用未绑定到任何记录源的未绑定表单。您需要使用 query/recordset 读取数据,将其写入表单的控件,然后使用 VBA 将任何修改后的值写入数据库。 - 这不适用于 continuous/datasheet 表格

2.) 或者您创建一个与主 table 具有相同结构的临时 table 并将子表单绑定到该临时 table。当您的(主)窗体打开时,您将子窗体的所有相关记录复制到临时 table。如果主窗体是 closed/exited,则使用临时 table.

的任何更改更新真实数据 table