Access

Accessでデータ更新時「データの競合」エラーが発生したときに確認すること

Accesseエラー

競合していないのにデータ競合エラー現象

AccessでSQL ServerにODBC接続をしている状態でデータを更新しようとする際、以下のようなエラーが発生する場合があります。

このレコードは他のユーザーによって変更されています。

[レコードの保存]を選択すると、他のユーザーによる変更を無視し、自分が行った変更を反映します。

[クリップボードにコピー]を選択すると、変更したデータはクリップボードコピーされ、他のユーザによる変更が反映されます。

必要に応じて、クリップボードのデータを張り付け、自分が変更したデータに戻すこともできます。

このとき、本当に他のユーザーがロックしている場合も考えられますが、他の誰もアクセスしていない状況で競合エラーとなる場合があります。

データの型を確認しましょう

こんなときはまず、Access・SQLServerそれぞれのデータの型を確認しましょう。

  1. データリンクしたAccessのテーブルに「Yes/No型」の項目がないか?
  2. 「Yes/No型」の項目がある場合、SQL Serverの該当項目を確認する。

SQLServerの該当項目が「Bit型」で「Null値を許可する」設定となっていた場合は、

上記のようなAccessのエラーが発生します。

競合エラーの原因

「Bit型」の項目にAccessからODBC接続すると「Yes/No型」と変換されますが、Accessの「Yes/No型」はYesかNoしかありません。(NULLは設定できません)

このため、SQLServer側が「Null値を許可する」設定になっているとデータ不整合となることが原因かと思います。

それにしても、もう少し別のエラーメッセージは出せないものでしょうか・・・・。

対策

  1. SQLServer側のデータ項目を「Null値を許可する」「既定値=0」にします。
  2. Accessから再接続し、動作確認しましょう。

これでOKです。

SQLServerでテーブル設定を更新する際、「設定更新出来ない」旨のメッセージが表示される場合は、

「SQL Server Management Studio」の「ツール→オプション→デザイナー
「テーブルの再作成を必要とする変更を保存できないようにする」のチェックをOFFにしてください。

ABOUT ME
アズビーパートナーズ
アズビーパートナーズ
プログラマーと社内SEとしての経験を活かして、 情報システム部門のご相談を承ります。 得意な分野はAccessによる短納期開発、 BIツール(QlikSense/QlikView)の開発です。 現在はCMSを利用したホームページの作成にも力を入れています。