Есть ли способ избежать надоедливых сообщений о конфликте записи, автоматизируя и скрывая процесс, чтобы он не выглядел так, как будто программа неисправна? В любом случае, кажется, что в этих сообщениях нет никакого смысла, поскольку есть только один реальный выбор - отказаться от изменений.
Автоматизация записи конфликтующих сообщений
Ответы (2)
Единственный известный мне способ избежать этого сообщения - повторно запросить ваш экран после запуска процесса или изменения данных в серверной базе данных (или на сервере sql)
Вы должны уметь обрабатывать эти ошибки в комбинации из двух мест. Первый и самый важный — это событие 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
Теперь я с готовностью согласен с одним из комментариев, что более важно, чтобы вы попытались устранить то, что вызывает эти ошибки, а не кодирование вокруг них. В моем случае я использую вышеуказанное решение для обработки конфликтов записи, которые возникают, когда пользователь открывает два экземпляра одной и той же формы для одной и той же записи и вносит изменения в оба экземпляра. Было бы лучше, если бы я запретил пользователю открывать одну и ту же запись дважды или предотвратил редактирование, позволив пользователю вносить изменения только в одном из экземпляров открытой формы, но ни один из них не совсем прост в реализации, особенно когда вы используете свой собственную коллекцию форм, так что, думаю, можно сказать, что я жду «черного дня».