Я унаследовал и приложение 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
Функция закрывает основную форму и открывает ее с новым идентификатором, чтобы новый клиент могдобавлено.
Есть ли в методе что-то, что может вызывать блокировку записи и никогда ее не разблокировать?
Спасибо!