在编辑已打开的表单时触发消息框

时间:2015-11-17 09:59:29

标签: database forms vba ms-access triggers

我正在尝试在用户尝试编辑已打开的表单时触发消息,但我似乎无法正确触发它。

这个想法是:

  

当有人在“表单视图”中编辑表单时,那没关系。

     
    

如果其他用户打开它并尝试在同时编辑它,我想要弹出一条消息并取消他们的更改。

  

由于这是一个将以多种形式放置的代码,我真的不想引用Form的确切名称,而是使用一些静态的东西,不需要我在每个表单的代码中更正名称。

由于数据库的设计(未经优化),记录锁定和相关不适用于此。

编辑:不幸的是,拆分数据库也不是一种选择。

Edit2:按照Nathan的建议,我开始使用这段代码,但是在打开表单时给了我一个错误。它基本上会过早地触发MsgBox,不会将表单名称插入表中,错误是“运行时错误”-214721908(80040e0c)'没有为命令对象设置命令文本“。有人有什么想法吗?

Edit3:我说得对,使用GoTo ErrMsg如下,在FormOpen中合并了两个代码。谢谢Nathan!

Private Sub Form_Open(Cancel As Integer)
Dim cmd As ADODB.Command
Dim strCriteria As String
Dim strOpened As String
Dim varDefault As Variant
Dim varOpened As Variant
Dim strForm As String
Dim strSQL As String
Dim ctrl As Control

Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandType = adCmdText

strOpened = "Opened = """ & Me.Name & """ "

varOpened = DLookup("Opened", "AllOpened", strOpened)
If IsNull(varOpened) Then
strSQL = "INSERT INTO AllOpened(Opened) " & _
"VALUES(""" & Me.Name & """)"
cmd.CommandText = strSQL
cmd.Execute
Else
GoTo ErrMsg
End If

For Each ctrl In Me.Controls
strCriteria = "FormName = """ & Me.Name & """ " & _
"And ControlName = """ & ctrl.Name & """"

varDefault = DLookup("DefaultVal", "Defaults", strCriteria)
If Not IsNull(varDefault) Then
ctrl.DefaultValue = """" & varDefault & """"
End If
Next ctrl
Exit Sub
ErrMsg:
MsgBox ("The form is already open by another user. Please double-check before editing."), , "Important!"
End Sub

0 个答案:

没有答案