Автоматизация записи конфликтующих сообщений

Есть ли способ избежать надоедливых сообщений о конфликте записи, автоматизируя и скрывая процесс, чтобы он не выглядел так, как будто программа неисправна? В любом случае, кажется, что в этих сообщениях нет никакого смысла, поскольку есть только один реальный выбор - отказаться от изменений.


person archer    schedule 18.04.2010    source источник
comment
Во-первых, нам нужно больше контекста, чтобы дать совет. Во-вторых, вы совершенно ошибаетесь в отношении доступных вариантов. В самом Access вы можете написать свой собственный код для обработки конфликта записи, хотя в первую очередь лучше избегать условий, которые его вызывают.   -  person David-W-Fenton    schedule 27.04.2010
comment
Я сомневаюсь в ценности тега [multiuser] здесь. Он вообще ничего не добавляет, так как Access по умолчанию включен для нескольких пользователей. Точно так же можно создать конфликт записи с одним пользователем.   -  person David-W-Fenton    schedule 15.05.2010


Ответы (2)


Единственный известный мне способ избежать этого сообщения - повторно запросить ваш экран после запуска процесса или изменения данных в серверной базе данных (или на сервере sql)

person codeslinger    schedule 26.05.2011

Вы должны уметь обрабатывать эти ошибки в комбинации из двух мест. Первый и самый важный — это событие 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

Теперь я с готовностью согласен с одним из комментариев, что более важно, чтобы вы попытались устранить то, что вызывает эти ошибки, а не кодирование вокруг них. В моем случае я использую вышеуказанное решение для обработки конфликтов записи, которые возникают, когда пользователь открывает два экземпляра одной и той же формы для одной и той же записи и вносит изменения в оба экземпляра. Было бы лучше, если бы я запретил пользователю открывать одну и ту же запись дважды или предотвратил редактирование, позволив пользователю вносить изменения только в одном из экземпляров открытой формы, но ни один из них не совсем прост в реализации, особенно когда вы используете свой собственную коллекцию форм, так что, думаю, можно сказать, что я жду «черного дня».

person HK1    schedule 27.05.2011