我有一个表单,用户可以在其中编辑多个不同的资料。此表单基于从几个底层表中提取并放入临时表中的资料。当用户进行更改并点击“保存”按钮时,表单中所做的任何更改都会更新/附加到基础资料表,并且临时表中的所有内容都会被转储。这一切都很好。
我的问题是表单上的本机关闭按钮。如果用户进行了更改,忘记点击保存,而只是关闭表单,则不会保存任何内容。我认为这是因为我需要运行我的更新和附加查询(这就是我的保存按钮发生的情况),但我不确定如何将它们合并,以便它们与本机关闭按钮一起运行。当我尝试将它们添加到 Form_Close 事件时,我收到一条错误讯息,指出 BeforeUpdate 事件中的某些内容阻止 Access 保存资料。我知道我可以从表单中洗掉关闭按钮,但如果可能,我宁愿将其保留。
Form_BeforeUpdate
txtOld = Nz(Me.Document.OldValue, "")
If Not (Me.NewRecord) Then
If MsgBox("Changes have been made to this record. Save changes?", vbYesNo, "") = vbNo Then
DoCmd.RunCommand acCmdUndo
End If
End If
cmdSave_Click
On Error GoTo Error_Handler
DoCmd.RunCommand acCmdSaveRecord
'check to see if new book field has changed and run append query if it has
If txtOld <> Me.Document.Value Then
DoCmd.OpenQuery "qryUpdateNewBookList"
End If
'This update query should run every time
DoCmd.OpenQuery "qryEditUpdate"
DoCmd.Close acForm, Me.Name, acSaveNo
Form_Close
DoCmd.RunSQL ("DELETE tblEditTbl.* FROM tblEditTbl")
uj5u.com热心网友回复:
一个快速提示。您可以使用以下代码来查看未保存资料的讯息。
Private Sub cmdClose_Click()
If Me.Dirty = True Then
MsgBox "Data is not saved. Save data first then try to close", vbExclamation
Exit Sub
Else
MsgBox "Data saved successfully."
DoCmd.Close
End If
End Sub
编辑:如果你想在更新之前检查它,那么你必须使用一个变量来检查资料是否被保存。在表单代码模块顶部宣告一个变量,如
Option Compare Database
Private blnSaveRecord As Boolean
使用下面的代码Save
按钮。
Private Sub cmdSave_Click()
blnSaveRecord = True
DoCmd.RunCommand acCmdSaveRecord
blnSaveRecord = False
End Sub
最后将下面的代码写入Form_BeforeUpdate
事件。
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strMsg As String
If Not blnSaveRecord Then
Cancel = True
strMsg = "Please save the record.," & _
vbNewLine & "or press ESC from keyboard to cancel the operation."
MsgBox strMsg, vbInformation, "Save Record"
End If
End Sub
uj5u.com热心网友回复:
我解决了我的问题。Harun24HR 让我朝着正确的方向思考。除了我现有的代码之外,我还需要使用 Form_Unload 事件并创建两个公共布尔变量来检查是否单击了保存按钮以及是否对表单进行了任何编辑。
Form_Unload
If Not SaveClicked And IsDirty Then
MsgBox "Data is not saved. Save data first and then try to close.", vbExclamation
Cancel = True
End If
0 评论