«Не удалось обновить; в данный момент заблокировано» Ошибка, вызванная VBA? - PullRequest
0 голосов
/ 05 декабря 2018

Я унаследовал и приложение MS Access.Есть много проблем, которые могут быть изменены внутри приложения, но, к сожалению, оно было срочно отправлено в производство, и не может быть внесено серьезных изменений в дизайн.

Я разделил и передал FE 6 разным пользователям.по большей части, кажется, с этим не так много проблем, однако некоторые пользователи периодически получают ошибку «Не удалось обновить; в настоящий момент заблокированы», когда они создают новую запись в одной из форм и вводят подчиненную форму для вставки информации.внутрь.Основная форма содержит информацию о клиентах, а подчиненная форма содержит информацию о продукте, который у них есть.

Оптимистическая блокировка используется во всем приложении, и, похоже, этого не происходит, потому что два пользователя обновляют одну запись, поскольку они в основном никогда не будут просматривать одни и те же записи.

Iдумаю, что проблема может быть в коде, который используется для генерации идентификатора клиента.Форма, в которой возникает ошибка: (1_1) Customer Subform.В этой подчиненной форме есть подчиненная форма, называемая (1_1_1) Product Subform.Они связаны 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

Функция закрывает основную форму и открывает ее с новым идентификатором, чтобы новый клиент могдобавлено.

Есть ли в методе что-то, что может вызывать блокировку записи и никогда ее не разблокировать?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...