Forms Access 2013:如何控制保存哪些表单更改以及取消哪些表单更改
我有一个带有3个按钮的表单: 保存-用于保存表单 NewReport-只有在保存当前表单后才可见,并且应该清除表单并允许用户输入另一种形式的数据 关闭-应在不保存未完成表单的情况下关闭应用程序 我似乎不知道如何使用更新前事件过程来控制这些函数 我不明白的一点是,Save命令实际上并没有将数据写入表中,直到我以某种方式更改了表单的焦点。因此,如果我的用户正在输入数据并点击Save按钮,则在Save命令完成时,表尚未保存数据。它只在焦点改变后出现在表中;就像一次询问 以下是我当前版本的代码:Forms Access 2013:如何控制保存哪些表单更改以及取消哪些表单更改,forms,ms-access-2013,Forms,Ms Access 2013,我有一个带有3个按钮的表单: 保存-用于保存表单 NewReport-只有在保存当前表单后才可见,并且应该清除表单并允许用户输入另一种形式的数据 关闭-应在不保存未完成表单的情况下关闭应用程序 我似乎不知道如何使用更新前事件过程来控制这些函数 我不明白的一点是,Save命令实际上并没有将数据写入表中,直到我以某种方式更改了表单的焦点。因此,如果我的用户正在输入数据并点击Save按钮,则在Save命令完成时,表尚未保存数据。它只在焦点改变后出现在表中;就像一次询问 以下是我当前版本的代码: Opt
Option Compare Database
Option Explicit
Private Cause As Variant
Private Sub btnClose_Click()
Cause = "CloseButton"
DoCmd.Close acForm, "frmReports", acSaveNo
End Sub
Private Sub btnNewReport_Click()
Cause = "NewReport"
Me.Requery
Me.RepStatus = ""
End Sub
Private Sub cmdSave_Click()
Dim outl As Outlook.Application
Dim mi As Outlook.MailItem
'blnGood = True
Cause = "SaveButton"
'Save the Record
DoCmd.Save acForm, "frmReports"
' If Me.DateOfVisit <> "" Then
Me.RepStatus = "Report Saved!"
' Set outl = New Outlook.Application
' Set mi = outl.CreateItem(olMailItem)
' mi.Body = "A new report was just recorded."
' mi.Subject = Application.CurrentUser & " Just Logged a Report."
' mi.To = "rich.temen@cox.net"
' mi.Send
'
' Set mi = Nothing
' Set outl = Nothing
' End If
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strMsg As String
Select Case Cause
Case "SaveButton"
Me.btnNewReport.Visible = True
'do nothing
Case "NewReport"
'di this
Case "CloseButton"
Me.Undo
End Select
'If Not blnGood Then
' strMsg = "Please use the Save button to save your Report," & _
' vbNewLine & "or Escape to reset the form."
' Call MsgBox(Prompt:=strMsg, Title:="Before Update")
'End If
End Sub
Private Sub Form_Load()
Me.btnNewReport.Visible = False
Cause = ""
End Sub
选项比较数据库
选项显式
作为变体的私人原因
专用子btnClose_Click()
原因=“关闭按钮”
文档关闭acForm,“frmReports”,acSaveNo
端接头
专用子btnNewReport_Click()
Cause=“NewReport”
我,再询问
Me.RepStatus=“”
端接头
私有子cmdSave_Click()
将outl设置为Outlook.Application
将mi设置为Outlook.MailItem
“blnGood=True
原因=“保存按钮”
“保存记录
DoCmd.Save acForm,“frmReports”
“如果我是DateOfVisite”,则
Me.RepStatus=“报告已保存!”
'Set-outl=新建Outlook.Application
'Set mi=outl.CreateItem(olMailItem)
'mi.Body=“刚刚录制了一份新报告。”
“mi.Subject=Application.CurrentUser&”刚刚记录了一份报告。“
“米·托·里奇。temen@cox.net"
“小姐,派人来
'
'设置mi=无
“出发=什么都没有
"完"
端接头
更新前的私有子表单(取消为整数)
作为字符串的Dim strMsg
选择案例原因
案例“保存按钮”
Me.btnNewReport.Visible=True
“什么也不做
案例“新报告”
“这是什么
案例“关闭按钮”
我,解开
结束选择
“如果不是布林戈德,那么
'strMsg=“请使用保存按钮保存您的报告,”_
“vbNewLine&”或Escape以重置窗体。”
'调用MsgBox(提示:=strMsg,标题:=“更新前”)
"完"
端接头
专用子表单_加载()
Me.btnNewReport.Visible=False
原因=“”
端接头
谢谢你在这方面的帮助,我已经兜了几个小时的圈子了
Rich您需要知道的是
DoCmd.Save acForm,“frmReports”
不会保存表单的数据(记录);它保存对窗体设计的更改。实际需要保存当前记录的是DoCmd.RunCommand acCmdSaveRecord
。类似地,DoCmd.Close acForm,“frmReports”,acSaveNo
告诉Access在关闭表单时不要保存对表单设计的更改。它不是说“不要保存记录”。如果有任何操作正在进行,则是BeforeUpdate事件代码中的Me.Undo
。谢谢,Skippy。我没有意识到这一点。这帮了大忙,不用担心!如果我之前的评论有用的话,请随时投赞成票。谢谢