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にしてください。

\逆引き辞書があると便利です/
[itemlink post_id=”1386″]

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。