#598 データの競合メッセージを無視するには? フォーム、VBA

テーブルやクエリと連結しているデータをフォーム上に表示している際、カレントレコードが保存されていない状態、すなわちレコード編集中の状態で、裏でVBAのプログラムで同じデータを編集したり、あるいはネットワーク環境で何からのデータ編集が行われたりした場合、フォーム上のレコードを保存しようとすると次のようなデータ競合の警告メッセージが表示される場合があります。
データ競合の警告メッセージ

このメッセージ表示を抑止して、データ競合エラーを無視させることができます。

それには、フォームの「Error/エラー時」イベントプロシージャに次のようなコードを記述します。

Private Sub Form_Error(DataErr As Integer, Response As Integer)

    If DataErr = 7787 Then
         Response = acDataErrContinue
    End If

End Sub


Form_Errorイベントは、フォーム上で何らかのエラーが発生したときに発生します。そしてこのイベントプロシージャの引数「DataErr」には発生したエラーの番号が入っています。データ競合エラーのエラー番号は「7787」ですので、その場合には同じくイベントプロシージャの引数「Response」に定数”acDataErrContinue”を代入します。それによってエラーが起きた場合でもエラーメッセージが表示されないようになります。


一方、そのときのレコードの扱いはデータの競合メッセージダイアログで[他のユーザーによる変更を反映]を選択したのと同じになります。すなわち、フォーム上での変更も無視され保存されません。もし、[レコードの保存]を選択したときのようにフォームでの編集内容の方を上書き保存させたい場合には、イベントプロシージャを次のようにして、レコードセットを強制的に更新処理します。

Private Sub Form_Error(DataErr As Integer, Response As Integer)

    If DataErr = 7787 Then
         Me.RecordsetClone.Update
         Response = acDataErrContinue
    End If

End Sub

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved