MS Access 2010 - 提示用户保存更改

时间:2014-11-17 14:01:53

标签: ms-access access-vba beforeupdate

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

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

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

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

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

    1. 我按OK然后收到此消息:
    2. Error message 2

      然后我回到Square One。

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

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

      更新

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

      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
      

2 个答案:

答案 0 :(得分:0)

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

移至另一条记录,关闭表格或明确点击功能区上的保存按钮

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

更新事件之前的表单通常用于验证,因此您可以检查已输入控件的数据,并决定是否允许保存数据。

要阻止保存数据,您可以更改取消变量,例如:

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

答案 1 :(得分:0)

  1. 在“设计视图”中打开表单

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

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

  4. 在右边你应该看到一个带有椭圆的框(" ...")。单击该框以打开与Before Update事件关联的代码。

  5. 如果它打开一个空白子,您还没有正确分配事件。确保事件被调用" BeforeUpdate" (一个字)而不是"更新之前" (两个字)。

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