1

プログラムに欠陥があるように見えないように、プロセスを自動化して非表示にすることにより、迷惑な書き込み競合メッセージを回避する方法はありますか? とにかく、これらのメッセージには何の意味もないように思われます。変更をドロップするという実際の選択肢は 1 つしかないからです。

4

2 に答える 2

2

そのメッセージを回避する唯一の方法は、プロセスを実行した後、またはバックエンド データベース (または SQL サーバー) でデータを変更した後に画面を再クエリすることです。

于 2011-05-26T18:42:14.470 に答える
0

これらのエラーは、2 つの場所の組み合わせで処理できる必要があります。最初の、そして最も重要なのは 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

次のように、VBA で保存コマンドを実行する場所でエラー 3021 を処理する必要もあります。

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

さて、これらのエラーの周りをコーディングするよりも、これらのエラーの原因を解決しようとする方が重要であるというコメントの 1 つに、私はすぐに同意します。私の場合、上記のソリューションを使用して、ユーザーが同じフォームの 2 つのインスタンスを同じレコードに対して開き、両方のインスタンスで編集を行ったときに発生する書き込みの競合を処理しています。ユーザーが同じレコードを 2 回開くのを防ぐか、ユーザーが開いているフォーム インスタンスの 1 つでのみ編集できるようにすることで編集を防ぐことができればよいのですが、どちらも実装が簡単ではありません。独自のフォーム コレクションなので、「雨の日」を待っていると言えます。

于 2011-05-27T02:17:14.800 に答える