Last Update : 2008/03/24

勝手にデータが置き換わる! The data has selfishly been changed!
ある人が、お客様から相談を受けました。仮にA子さんとします。
相談の内容はこうです。

「SQL-Serverのテーブルをリンクして使っているんだけど、データを更新すると、ぜんぜん関係ないレコードまで同じ値になっちゃうんですよ」

A子さんもリンクテーブルを作り、やってみました。が、どうやってもそんな現象は発生しません。
テーブル名に問題があるのかと思い、同じ名前にしてみましたが駄目
項目名に問題があるのかと思い、同じ名前にしてみましたが駄目
ODBCドライバに問題があるのかと思い、同じバージョンにしてみましたが駄目
MDB が破損しているのかと思い、最適化してみましたが駄目

A子さんの環境ではどーーーーやっても再現しませんが、お客様の環境では必ず100%絶対に百発百中再現します。
ほとほと疲れ果てたA子さん。SQL-Server のテーブルデータと、MDB を送ってもらうことにしました。
数日後、送られてきたデータを確認したA子さんは、ある恐ろしい事実に気づきました。

問題のテーブルには、ユニークインデックスが無かったのです。

リンクテーブルは、リンク先に一意となるインデックスが無い場合、読取専用となりデータを更新することができないはず。
では、ではどうして…?これは、魔法…?

A子さんは、リンクテーブルのデザインを確認しました。すると、驚いた事にそこには主キーが設定されているではないですか。
A子さんは一瞬目の前が真っ暗になりました。

そうです。お客様は、ユニークインデックスが無いテーブルのリンクテーブルを作るときに、Access が出力するダイアログ「固有レコード識別子の選択」で、ぜんぜん一意にならない項目を選択していたのです。

「固有レコード識別子の選択」で指定された項目の値が同じレコードが複数ある場合、そのレコードのうち1つを更新すると他のレコードもぜーんぶ同じ値になってしまうのでした。

…いやぁ。そんな動作になるとは。知らなかったですよ。


この件に関しましてご質問がございましたら、こちらまで。


この情報は、お客様の疑問・問題解決のお役に立ちましたか?
満足度を左から右へ高い順へご選択ください。


←役に立った 9 8 7 6 5 4 3 2 1 役に立たない→
この情報へのご意見、ご要望がございましたらこちらへご記入ください。
( 全角 500 文字以内 )




Top へもどる