2010-04-18 57 views
1

有没有方法来避免通过自动化和隐藏的进程,以便它不会出现好像程序是有缺陷的恼人的写入冲突的消息?无论如何,这些消息似乎没有任何意义,因为只有一个真正的选择是放弃更改。自动化写冲突消息

+2

这是关于什么? – Amber 2010-04-18 06:21:49

+0

首先,我们需要更多的上下文来提供建议。其次,你完全误解了可用的选择。在Access本身中,您可以编写自己的代码来处理写入冲突,不过最好先避免产生它的条件。 – 2010-04-26 23:07:27

+1

我在这里质疑[multiuser]标签的值。它根本没有添加任何内容,因为默认情况下Access是启用多用户的。同样,可能会与单个用户产生写入冲突。 – 2010-05-14 20:10:12

回答

2

我知道,以避免该消息的唯一方法是运行的进程或后端数据库上更改的数据(或SQL Server)

0

你应该能够在一个组合来处理这些错误后重新查询你的屏幕两个地方。第一个,也是最重要的是Form_Error事件。您的代码将是这个样子:

Private Sub Form_Error(DataErr As Integer, Response As Integer)  
    If DataErr = 7787 Then 
     MsgBox "Oops, this record was edited by someone else or " & _ 
       "in another screen while you were making edits." & _ 
       "Your edits cannot be saved." 
     Response = acDataErrContinue 
    End If 
End Sub 

你也将需要处理的错误3021的任何地方,你在VBA运行保存命令,像这样:现在

Private Sub cmdSave_Click() 
    On Error GoTo ErrHandler 

    DoCmd.RunCommand acCmdSaveRecord 

    Exit Sub 

ErrHandler: 
    If Err.Number = 3021 Then 
     'Do Nothing 
     Resume Next 
    Else 
     'Handle other errors here 
     Resume Next 
    End If 
End Sub 

,我随手用一个同意评论说,你试图解决导致这些错误的任何东西,而不是围绕它们编码更重要。在我的情况下,我正在使用上述解决方案来处理在用户将同一表单的两个实例打开到同一记录并在两个实例中进行编辑时发生的写入冲突。它会更好,如果我会阻止打开同一个记录两次的用户或防止编辑只允许用户进行编辑在打开的表单实例之一,但这些都不是完全容易实现,尤其是当你使用你的自己的表单集合,所以我想你可以说我正在等待一个“下雨天”。