我在MS Access中使用组合框来导航到数据条目并希望msgbox询问用户是否应该保存,撤消对当前条目所做的更改,还是应该取消更新过程。 我作为BeforeUpdate运行的代码如下所示:
val s = """56.38.234.188 – 99788 "GET /KBDOC-00157.html HTTP/1.0""""
val pattern1: String = "KBDOC"
s.contains(pattern1)
// true
// Or,
val pattern2: String = ".*KBDOC.*"
s.contains(pattern1)
// true
// Or,
val pattern3: String = ".*KBDOC.*"
s.matches(pattern3)
// true
// but this will be false
val pattern4: String = "KBDOC"
s.matches(pattern4)
// false
选项是和否按预期工作。虽然,由于某种原因,我无法绕过头,Me.undo会阻止事件更新,就好像Cancel会被设置为True - 意思是: 表单保留在当前数据中,不会转到选择数据。
组合框的AfterUpdate事件只需运行
If Me.Dirty = True Then
Select Case MsgBox("Keep changes?", vbYesNoCancel)
Case vbYes
DoCmd.Save
Case vbNo
Me.Undo
Case vbCancel
Cancel = True
End Select
End If
我还尝试手动控制取消= False而没有任何影响。
答案 0 :(得分:0)
我希望因为如果您对UNDO没有数据更改,因此无需更新,事件中止
显然,这正是我的方法中的错误。我现在简单地将整个事情移到了AfterUpdate,现在它正在顺利进行。
If Me.Dirty = True Then
Select Case MsgBox("Keep changes?", vbYesNoCancel)
Case vbYes
DoCmd.Save
DoCmd.SearchForRecord , "", acFirst, "[ID] = " & Str(Nz(Screen.ActiveControl, 0))
Case vbNo
Me.Undo
DoCmd.SearchForRecord , "", acFirst, "[ID] = " & Str(Nz(Screen.ActiveControl, 0))
Case vbCancel
Cancel = True
End Select
Else
DoCmd.SearchForRecord , "", acFirst, "[ID] = " & Str(Nz(Screen.ActiveControl, 0))
End If
可能不是最干净的解决方案,但它正在做它应该做的事情。