【问题标题】:Cancel changes in a subform in Access 2013在 Access 2013 中取消子窗体中的更改
【发布时间】:2016-05-11 01:28:38
【问题描述】:

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

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

使用此代码,在子表单外部单击不仅会取消保存,还会清除我在子表单中输入的任何内容。这意味着如果不先取消子表单更改,我将无法保存表单。

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

【问题讨论】:

    标签: ms-access vba ms-access-2013


    【解决方案1】:
    Me.Undo 
    

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

    这个:

    Cancel = True
    

    足以取消更新。

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

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

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

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

    【讨论】:

    • 还有第三种选择:您可以将表单上发生的所有数据事件包装在一个事务中,并根据表单上的事件显式提交(或回滚)事务。
    • 第四个选项:将表单绑定到断开连接的记录集。这使您可以执行连续表单,并在多条记录上维护未提交的值,并明确写入或拒绝每条记录。断开连接的记录集需要您使用 ADO,虽然它们在您习惯时非常棒,但有一点学习曲线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多