MS访问VBA - me.undo停止更新后事件

时间:2017-04-10 10:04:34

标签: combobox access-vba undo

我在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而没有任何影响。

1 个答案:

答案 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

可能不是最干净的解决方案,但它正在做它应该做的事情。