我有一个绑定到表格的表单,但是当我保存时(我有一个按钮),我需要进行一些手动标志设置。保存有效,但我注意到因为它是绑定的,所以无论如何它都会保存。尽管有限制,但如何防止自动保存?有没有办法中断 before_update() 或者其他什么?
我看到了这个链接:我可以添加 UI 操作确认吗?
所以我尝试设置 form_beforedate() 如下所示:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim mIsUserUpdate As Boolean 'Flag
If Not mIsUserUpdate Then Cancel = True
End Sub
在我的模块中,我在顶部添加了:
Private mIsUserUpdate As Boolean
在我的保存按钮中我有这个功能:
Private Sub cmdSave_Click()
Dim strName As String
strName = Me.Name
SaveTabs Forms(strName)
End Sub
保存选项卡在模块中的位置如下所示:
Function SaveTabs(frm As Form) As Integer
Set dbs = CurrentDb()
tbl = "SELECT " &.......
Set tdf = dbs.OpenRecordset(tbl)
ArrKnownFields = Getknownfields(tdf)
'Folgend, der Update-Befehl..
For Each ctrl In frm
If IsInArray(ctrl.Name, ArrKnownFields) Then
If Not IsNull(ctrl.Value) Then
strSQL = strSQL & "[" & ctrl.Name & "] = '" & ctrl.Value & "',"
Else
strSQL = strSQL & "[" & ctrl.Name & "] = ' ',"
End If
End If
Next ctrl
If Forms!frmMainMenu.cboDatachoice.ListIndex = 0 Then
strSQL = strSQL & "1_Val= '" & gUser & "'"
If Len(strSQL) > 0 Then
strSQL = "UPDATE END_CFR_" & strName & " SET " & strSQL & " WHERE "
If strName = "Col" Then
strSQL = strSQL & "R_IDCC ='" & frm.txtID.Value & "'"
ElseIf strName = "Fac" Then
strSQL = strSQL & "R_IDFF ='" & frm.txtID.Value & "'"
ElseIf strName = "Deb" Then
strSQL = strSQL & "R_IDFD ='" & frm.txtID.Value & "'"
End If
End If
**mIsUserUpdate = True** 'flag ON
frm.Dirty = False
CurrentDb.Execute strSQL, dbFailOnError
因此,因为我使用 gUser 设置“1_Val”,所以我必须手动执行此操作。
不幸的是,frm.Dirty = False,强制激活form_beforeUpdate,但由于某种原因,mIsUserUpdate 突然再次变为 false,尽管我像上面一样将其设置为 true..
那么我做错了什么?因为我仍然收到错误 2101,因为 frm.dirty= false 不起作用。
在你问之前,我已经绑定了它,以便我可以看到数据集的数量并使用箭头滚动数据集,而且绑定时可以更轻松地填充各种文本字段和组合框。
顺便说一句,我正在使用 access 2021。
提前致谢
您可以使用 Form.Undo 方法撤消表单中的更改。
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.Dirty Then
If MsgBox("Save the changes?", vbYesNo + vbQuestion, "Save Changes") = vbNo Then
Me.Undo
End If
End If
End Sub
删除 local 变量,因为它隐藏了模块变量:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not mIsUserUpdate Then Cancel = True
End Sub