【问题标题】:MS Access 2010 - Prompting user to save changesMS Access 2010 - 提示用户保存更改
【发布时间】:2014-11-17 14:01:52
【问题描述】:

我已经开发了一个表单,我想在用户离开修改后的记录之前提示他们保存更改。

如果用户试图离开,我希望出现一个提示,询问他们是否希望保存更改,然后他们可以选择“是”或“否”。

我被告知Before Update 事件是我需要关注的事件,但我不断收到“您输入的更新前的表达式,因为事件属性设置产生了以下错误”消息。

这些是我在遇到错误之前采取的步骤:

  1. 将视图更改为表单视图
  2. 通过表单在记录中的任意位置进行更改
  3. 尝试通过我放入表单中的导航按钮导航离开表单(如果没有进行任何更改,它工作正常,但如果进行了单个更改,则无法执行任何操作)
  4. 什么都没有发生,所以我恢复到设计视图,以接收以下错误通知

  1. 我按确定,然后收到此消息:

然后我回到一号广场。

此外,自从出现此问题以来,任何条件格式都已完全停止工作;我不确定这两者是否有联系,但认为值得一提。

任何想法如何实现(理想情况下没有错误)?不幸的是,我无法发布我的系统,因为它处理高度机密的数据。

更新:

我尝试了各种我修改过的代码,但都无济于事。目前,我已经完全删除了任何此类代码,但我过去尝试过的代码是这样的:

Private Sub Form_BeforeUpdate(Cancel As Integer)

Dim ctl As Control

On Error GoTo Err_BeforeUpdate

If Me.Dirty Then
   If MsgBox("Do you want to save?", vbYesNo + vbQuestion, _
           "Save Record") = vbNo Then
      Me.undo
   End If
End If

Exit_BeforeUpdate:
   Exit Sub

Err_BeforeUpdate:
   MsgBox Err.Number & " " & Err.Description
   Resume Exit_BeforeUpdate
End Sub

【问题讨论】:

  • 请贴出代码。听起来你完全错了。
  • 问题已更新 - 有什么想法吗?
  • 在 On Error GoTo... 行的代码中放置一个代码中断,然后当代码中断并突出显示该行时,重复按 F8(慢慢地!)直到您收到消息。这将准确地告诉你它不喜欢哪一行代码。发布那行代码和你得到的确切错误,我们会看看是否有什么东西跳出来。
  • 感谢您的建议;我已经在“On Error...”行设置了代码中断,但不幸的是,当我调试时,它要求我运行一个宏(我没有),因此当我按 F8 时,什么也没有发生。
  • 你最近有没有压缩&修复和反编译过?我希望您不打算使用带有此想法的子表单。 MS Access 的默认设置是保存,停止保存需要做很多工作,通常你需要一个未绑定的表单。

标签: ms-access vba beforeupdate


【解决方案1】:

Microsoft Access 绑定表单的默认行为是在用户执行以下操作时自动保存记录:

移动到另一条记录,关闭表单或明确单击功能区上的保存按钮

因此,我认为要求用户确认是否要保存可能是多余的。

更新事件前的表单一般用于验证,因此可以检查已输入到控件中的数据,并在代码中决定是否允许保存数据。

为了防止数据被保存,您可以更改 Cancel 变量,例如:

Cancel=True
MsgBox "There is a problem with the data entry", vbExclamation, "Please Check Your Data"

然后用户必须按下退出键或单击功能区上的撤消才能退出编辑模式

关于您遇到的错误,请查看并尝试以下网页中记录的反编译开关:

Decompile Switch

我在反复使用和保存 VBA 代码时偶尔会出错。进行反编译通常可以解决此问题。但是,请确保在开始之前备份数据库。

您也可以尝试将表单导出为文本文件,然后使用以下代码重新导入,这将在表单损坏时提供帮助:

    Application.SaveAsText acForm, stringFormName, stringFolderName & "\" & stringFormName & ".txt"
    Application.LoadFromText acForm, stringFormName, stringFileName

【讨论】:

  • 我将项目导入到一个新数据库中,现在一切正常。感谢您的努力!
【解决方案2】:
  1. 在设计视图中打开表单

  2. 右键单击表单,然后从弹出菜单中单击“属性”

  3. 向下滚动到“更新前”事件

  4. 一直到右侧,您应该会看到一个带有椭圆(“...”)的框。单击该框以打开与更新前事件关联的代码。

  5. 如果它打开到一个空白子,你没有正确分配事件。确保事件被称为“更新前”(一个词)而不是“更新前”(两个词)。

您的错误表明这可能是问题的原因。

【讨论】:

  • 我看了看,但“更新前”没有出现在任何地方;但是,我将项目导入到一个新数据库中,现在一切正常!不过,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多