Office中国论坛/Access中国论坛

标题: 显式保存 [打印本页]

作者: 懒UFO    时间: 2003-2-12 00:10
标题: 显式保存
当修改一条记录之后,不让access直接保存,而是需要显式的保存。能够实现吗?怎样实现?
作者: WTM1    时间: 2003-2-12 01:32
什么是显示保存

作者: 懒UFO    时间: 2003-2-12 06:24
由于在编辑ACCESS窗体中的记录时,当将插入点移到不同的记录,或关闭正在处理的窗体或数据表时,Microsoft Access 会自动保存所添加或编辑的记录。

   ACCESS运用自动保存记录的功能,因此会产生一些误操作,我想取消ACCESS自动保存功能,通过保存命令按钮用人工保存的方法来保存记录.
    关于以上问题特请教各路高手!望不吝赐教!

作者: Roadbeg    时间: 2003-2-13 06:39
方法1:
在窗体的 BeforeUpdate 事件中加入检查语句.
如果是保存按钮产生的事件则保存,反之则 Cancel
注意是窗体的 BeforeUpdate 事件,而不是某个绑定控件的事件.

方法2:
其实用 Current 事件也能实现,只不过要麻烦一点.
作者: 懒UFO    时间: 2003-2-13 07:20
谢谢 Roadbeg!
作者: 懒UFO    时间: 2003-2-14 00:09
这段代码有错吗?如果用记录浏览按钮转到下一条记录,哪怕是单击的“否”也会保存。不信各位试试!
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If bleSave = False Then
       If Me.Dirty = True Then
            If MsgBox("本记录已更改,是否需要保存?", 4) = 7 Then
                SendKeys "{esc}", True
             End If
        End If
    Else
        bleSave = False
    End If
Private Sub 保存_Click()
bleSave = True
DoCmd.RunCommand acCmdSaveRecord
End Sub

作者: Roadbeg    时间: 2003-2-14 00:14
反 sendkeys 改为 窗体的 undo 方法
或置 参数 cancel=-1
作者: 懒UFO    时间: 2003-2-14 00:19
小生愚笨。Roadbeg可以清楚一点吗?
作者: Roadbeg    时间: 2003-2-14 00:21
改为
Private Sub Form_BeforeUpdate(Cancel As Integer)
If bleSave = False Then
If Me.Dirty = True Then
If MsgBox("本记录已更改,是否需要保存?", 4) = 7 Then
form.undo
End If
End If
Else
bleSave = False
End If
Private Sub 保存_Click()
bleSave = True
DoCmd.RunCommand acCmdSaveRecord
End Sub
  

作者: 懒UFO    时间: 2003-2-14 00:31
我试试!Thank you!
作者: 懒UFO    时间: 2003-2-14 00:34
我试试!Thank you!
作者: Roadbeg    时间: 2003-2-14 00:43
其实用 sendkeys 也可以,但有一个焦点问题,即你的 esc 是发送给谁
如果在 sendkeys 之前 加上一句
控件.setforce 就可以了
控件必须是与记录相关的  (绑定控件)
作者: zhengjialon    时间: 2003-2-15 00:08
)    Use the form's BeforeUpdate event to run code each time Access tries to save a record.  This way, if the user doesn't want to save a record,   you can issue an Undo command instead of saving the record.

Note:  This will generate a Message Box asking for confirmation each time a changed record is saved.  I leave it on whoever is going to follow this method to determine how to refine this per user preference. (Hint: Try a Checkbox.)

'****************** Code Start ******************
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strMsg As String
    strMsg = "Data has changed."
    strMsg = strMsg & "@Do you wish to save the changes?"
    strMsg = strMsg & "@Click Yes to Save or No to Discard changes."
    If MsgBox(strMsg, vbQuestion + vbYesNo, "Save Record?") = vbYes Then
        'do nothing
    Else
        DoCmd.RunCommand acCmdUndo
        
        'For Access 95, use DoMenuItem instead
        'DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
    End If
End Sub
'****************** Code End ******************

作者: 李寻欢    时间: 2003-2-15 00:15
但有一个这样的问题,数据已经输入,但又未触发Form_BeforeUpdate事件就退出了(比如电脑突然掉电或死机),数据还是会保存进去的吧?
作者: zhengjialon    时间: 2003-2-15 00:20
不会,数据还未更新,不信你试试。
作者: Roadbeg    时间: 2003-2-15 00:42
不会更新的,Access 是整条记录一齐处理的.
作者: 李寻欢    时间: 2003-2-15 00:44
哦,明白了,既是BeforeUpdate都没触发,又怎会更新呢?我真傻了:)
作者: zhengjialon    时间: 2003-2-15 01:10
难得糊涂
作者: oyney    时间: 2003-12-12 01:47
标题: 显式保存又一问题:未通过合法性检查后再关闭报2115错。
[attach]2778[/attach]
    请看“未完成任务”窗体,自己现在测试出来的问题是:在按下“添加记录”按钮进入添加模式下后,如果要求输入的字段未输入数据(即有字段为空),此时按“保存按钮”会提示必须输入数据(即做合法性检查),系统停在编辑模式下,然后此时如果按下窗体的关闭按钮,就会报2115错。
作者: 没牙兔兔    时间: 2003-12-12 02:10
嘿嘿,长知识啊~!
作者: qfyyc    时间: 2003-12-12 06:03
另一方法,可以通过建立临时表的,按保存后,存入数据表。
是否可行?




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