競合していないのにデータ競合エラー現象
AccessでSQL ServerにODBC接続をしている状態でデータを更新しようとする際、以下のようなエラーが発生する場合があります。
このレコードは他のユーザーによって変更されています。
[レコードの保存]を選択すると、他のユーザーによる変更を無視し、自分が行った変更を反映します。
[クリップボードにコピー]を選択すると、変更したデータはクリップボードコピーされ、他のユーザによる変更が反映されます。
必要に応じて、クリップボードのデータを張り付け、自分が変更したデータに戻すこともできます。
このとき、本当に他のユーザーがロックしている場合も考えられますが、他の誰もアクセスしていない状況で競合エラーとなる場合があります。
データの型を確認しましょう
こんなときはまず、Access・SQLServerそれぞれのデータの型を確認しましょう。
- データリンクしたAccessのテーブルに「Yes/No型」の項目がないか?
- 「Yes/No型」の項目がある場合、SQL Serverの該当項目を確認する。
SQLServerの該当項目が「Bit型」で「Null値を許可する」設定となっていた場合は、
上記のようなAccessのエラーが発生します。
競合エラーの原因
「Bit型」の項目にAccessからODBC接続すると「Yes/No型」と変換されますが、Accessの「Yes/No型」はYesかNoしかありません。(NULLは設定できません)
このため、SQLServer側が「Null値を許可する」設定になっているとデータ不整合となることが原因かと思います。
それにしても、もう少し別のエラーメッセージは出せないものでしょうか・・・・。
対策
- SQLServer側のデータ項目を「Null値を許可する」「既定値=0」にします。
- Accessから再接続し、動作確認しましょう。
これでOKです。
SQLServerでテーブル設定を更新する際、「設定更新出来ない」旨のメッセージが表示される場合は、
「SQL Server Management Studio」の「ツール→オプション→デザイナー
→「テーブルの再作成を必要とする変更を保存できないようにする」のチェックをOFFにしてください。
\逆引き辞書があると便利です/
[itemlink post_id=”1386″]