“无法更新;当前已锁定”由VBA引起的错误?

时间:2018-12-05 16:28:00

标签: ms-access access-vba ms-access-2010 ms-access-2013 ms-access-2016

我已经继承了MS Access应用程序。在应用程序中,有许多问题可以更改,但是不幸的是,它已匆匆投入生产,无法进行重大的重新设计更改。

我已经拆分,并将有限元分配给6个不同的用户。在大多数情况下,这似乎没有很多问题,但是,当某些用户在其中一个表单上创建新记录并输入子表单以插入信息时,会间歇性地收到错误“无法更新;当前已锁定”进去。主表单包含客户详细信息,子表单包含有关其所拥有产品的信息。

在整个应用程序中都使用了乐观锁定,这似乎没有发生,因为两个用户正在更新一条记录,因为他们基本上不会查看相同的记录。

我认为该问题可能是用于生成该客户ID的代码。发生错误的表单是(1_1)Customer Subform。该子表单中有一个子表单,称为(1_1_1)Product子表单。这些通过每个子窗体中存在的PID进行链接。在产品子表单中单击鼠标时,应用程序会挂起几秒钟,然后给出错误“无法更新;当前已锁定”。

表单上有一个按钮可以执行以下操作:

Private Sub NewCustomerRecord_Click()

DoCmd.Close acForm, "1Main_IPCOR"
DoCmd.OpenForm "1Main_IPCOR", acNormal, "", "", , acNormal

Forms![1Main_IPCOR]![1IPCOR_Sform]![(1_1)Customer Subform].SetFocus
DoCmd.GoToRecord , , acNewRec

Forms![1Main_IPCOR]![1IPCOR_Sform]![CREATED_DATE] = Now()

Forms![1Main_IPCOR]![1IPCOR_Sform]![P_ID] = NewP_ID()
Forms![1Main_IPCOR]![1IPCOR_Sform].Form.Refresh

Exit_New_record_Click:
Exit Sub

Err_New_record_Click:
MsgBox Err.Description
Resume Exit_New_record_Click
End Sub


Private Function NewP_ID() As String
Dim strTemplate As String

strTemplate = Replace("CUSXX", "XX", Right(Year(Date), 2))
NewP_ID = Nz(DMax(Expr:="Right([P_ID], 5)", _
                Domain:="[(1_1)_Customer]", _
                Criteria:="[P_ID] Like '" & strTemplate & "*'"), "0")
NewP_ID = strTemplate & Format(Val(NewP_ID) + 1, "00000")
    'Exit function now after successful incrementing or after error message

Exit_P_ID:
Exit Function

   'If an error occurred, display a message, then go to Exit statement
P_ID_Err:
    MsgBox "Error " & Err & ": " & Error$

    Resume Exit_P_ID
End Function

该函数正在执行的操作是关闭主窗体,然后使用新的ID重新打开它,以便可以添加新客户。

该方法中是否存在任何可能导致记录被锁定且从未解锁的记录?

谢谢!

0 个答案:

没有答案