拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用本机关闭按钮保存基于临时表的表单更改

使用本机关闭按钮保存基于临时表的表单更改

白鹭 - 2022-01-23 1994 0 0

我有一个表单,用户可以在其中编辑多个不同的资料。此表单基于从几个底层表中提取并放入临时表中的资料。当用户进行更改并点击“保存”按钮时,表单中所做的任何更改都会更新/附加到基础资料表,并且临时表中的所有内容都会被转储。这一切都很好。

我的问题是表单上的本机关闭按钮。如果用户进行了更改,忘记点击保存,而只是关闭表单,则不会保存任何内容。我认为这是因为我需要运行我的更新和附加查询(这就是我的保存按钮发生的情况),但我不确定如何将它们合并,以便它们与本机关闭按钮一起运行。当我尝试将它们添加到 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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *