Office中国论坛/Access中国论坛

标题: 记录更新前的尴尬之我见! [打印本页]

作者: eio    时间: 2003-11-10 00:37
标题: 记录更新前的尴尬之我见!
以下是论坛中高手的做法
Private Sub FORM_BeforeUpdate(Cancel As Integer)
  If MsgBox("保存吗?", vbYesNo, Me.Caption) <> vbYes Then
    Cancel = True
  End If
End Sub
或者
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strMsg As String
    strMsg = "数据已经改变."
    strMsg = strMsg & vbCr & "你想保存吗?"
    strMsg = strMsg & vbCr & "点击[是]保存,点击[否]放弃保存。"
    If MsgBox(strMsg, vbQuestion + vbYesNo, "记录保存吗?") = vbYes Then
        ' 什么也不需要做,就会保存记录
    Else
        DoCmd.RunCommand acCmdUndo
        
        ' 对于Access 95, 使用DoMenuItem方法代替
        'DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
    End If
End Sub

[move]--使用这样的代码是很好的,可是如果有子窗体的话就麻烦了,不是提醒次数过多,就是子窗体没有数据也保存,总之不得法,众高手能否“讨个说法”?[/move][em00]
作者: andymark    时间: 2003-11-10 01:31
这个问题也一直困扰着我,我是用toolbar做按钮的,如果光标在子窗体再按增加会没反应
,必须在主窗体加一个setfocus,这样一来主窗体有一条黑带不美观。关注
作者: 阿罗    时间: 2003-11-10 04:44
我的方法是在主窗体添加一个checkbox,让敌人自己选择是否在子窗体变化时也提醒。


作者: 阿罗    时间: 2003-11-10 08:13
另外的心得就是最好不要在beforeUpdate里面用cancel.
作者: hunanhu    时间: 2003-11-10 19:36
关于这个问题,我在软件开发的过程中深有体会,我的作法是:
      在主窗体设置一个bool型的公共变量isDirty,在主窗体及子窗体的dirty事件将isDirty置为True,在窗体的保存事情中将isDirty设为False,我不在form_BeforeUpdate事件中设置代码,只在窗体关闭/记录跳转而且isDirty为真的时候,才提示用户注意保存记录.





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3