代码之家  ›  专栏  ›  技术社区  ›  John

是否有方法覆盖使用表单向导创建的Access 2007表单的自动记录更新?

  •  4
  • John  · 技术社区  · 14 年前

    我刚接触到VBA,使用在表中显示记录的表单向导创建了一个表单。那是小菜一碟。

    不过,我在窗体中得到的行为是,当我移动记录时,对记录的更新会自动发生。

    我想要的是,只有当我单击表单中的“更新”按钮时,更新才会发生。

    似乎我可以从头开始构造表单,以编程方式更新所有(无边界)控件,然后以编程方式更新控件中的记录,但这似乎做得太多了。

    有没有一种方法可以从Access内部或使用VBA代码“关闭”自动更新行为?

    谢谢!

    4 回复  |  直到 14 年前
        1
  •  6
  •   HansUp    14 年前

    正如罗伯特建议的那样,通过取消更新前事件,可以避免保存更改的记录。代码如下所示:

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

    但是,这种方法要求您在离开记录之前放弃对记录所做的任何更改。没有 Me.Undo ,您可以取消更新,但Access不允许您移动到其他记录。在移到另一个记录之前,必须保存或放弃对当前记录的更改。

    如果要移动到另一个记录,但不首先放弃更改,我认为您需要尝试断开连接的记录集。它是在内存中创建的ADO记录集,不绑定到任何数据源。可以添加命令按钮以保存对命令所做的更改。如果这听起来有用,请参阅数据库期刊上丹尼·莱桑德里尼的这篇文章: Create In-Memory ADO Recordsets

        2
  •  3
  •   JeffO    14 年前

    如果用户意外地更改了数据并将记录移动到记录中,导致了更新,那么您可能应该有一个“编辑”按钮,仅在需要时才开始编辑。如果更改移到另一个记录,您可以使用其他建议的代码来撤消更改,或者除非保存或取消,否则阻止它们移动。

        3
  •  1
  •   Robert Harvey    14 年前

    有没有办法“关掉”这个 自动更新行为自 在Access中,还是使用VBA代码?

    您可以尝试取消 Form.BeforeUpdate 事件,除非设置了标志。单击按钮时,设置标志,设置 Form.Dirty 设置为假(保存数据),然后清除 表单.beforeupdate 事件处理程序。

        4
  •  1
  •   Tony Toews    14 年前

    你为什么要这么做?访问以记录为基础。不像Excel,它只在您选择保存或退出时保存电子表格。

    听起来你有一个在屏幕上有多个记录的连续表单。唯一的方法是使用“临时”表,并在准备好后将“临时”表的内容保存到永久表中。但是,如果不做更多的工作,您将无法确定其他人是否更改了记录。

    推荐文章