
| 勝手にデータが置き換わる! The data has selfishly been changed! |
|
ある人が、お客様から相談を受けました。仮にA子さんとします。 相談の内容はこうです。 「SQL-Serverのテーブルをリンクして使っているんだけど、データを更新すると、ぜんぜん関係ないレコードまで同じ値になっちゃうんですよ」 A子さんもリンクテーブルを作り、やってみました。が、どうやってもそんな現象は発生しません。 テーブル名に問題があるのかと思い、同じ名前にしてみましたが駄目。 項目名に問題があるのかと思い、同じ名前にしてみましたが駄目。 ODBCドライバに問題があるのかと思い、同じバージョンにしてみましたが駄目。 MDB が破損しているのかと思い、最適化してみましたが駄目。 A子さんの環境ではどーーーーやっても再現しませんが、お客様の環境では必ず100%絶対に百発百中再現します。 ほとほと疲れ果てたA子さん。SQL-Server のテーブルデータと、MDB を送ってもらうことにしました。 数日後、送られてきたデータを確認したA子さんは、ある恐ろしい事実に気づきました。 問題のテーブルには、ユニークインデックスが無かったのです。 リンクテーブルは、リンク先に一意となるインデックスが無い場合、読取専用となりデータを更新することができないはず。 では、ではどうして…?これは、魔法…? A子さんは、リンクテーブルのデザインを確認しました。すると、驚いた事にそこには主キーが設定されているではないですか。 A子さんは一瞬目の前が真っ暗になりました。 そうです。お客様は、ユニークインデックスが無いテーブルのリンクテーブルを作るときに、Access が出力するダイアログ「固有レコード識別子の選択」で、ぜんぜん一意にならない項目を選択していたのです。 「固有レコード識別子の選択」で指定された項目の値が同じレコードが複数ある場合、そのレコードのうち1つを更新すると他のレコードもぜーんぶ同じ値になってしまうのでした。 …いやぁ。そんな動作になるとは。知らなかったですよ。 |
この情報は、お客様の疑問・問題解決のお役に立ちましたか? 満足度を左から右へ高い順へご選択ください。 |