• 締切済み

Access 主キーの変更について

調査データの集計、蓄積用のDBを制作しております。 制作しているDBは主キーに県コードが含まれています。 そのため、調査データの住所に変更があるとコードを変えなければなりません。 AccessでのDBはほぼ完成しており、今からコードの形態を変更することは避けたいです。(もともと古い独自のDBのデータを流用しています。) 現在、主キーに県コードが含まれていますが、それとは別に県コードフィールドを設けています。 ※コードの形態 (先頭の二桁又は一桁が県コード、コードは4桁又は5桁) 例   主キー 北海道 1001 東京  13199 沖縄  47001 新規のデータを入力する際に主キーを入力しているのですが VBAの知識がないので県コードは個別に入力しています。 住所が変わり県が変更になった場合主キーを変更する必要が あるのですが一対多でリレーションシップをいくつもしてあり サブフォームなども使用してます。 主のフォームで主キーを変更した場合、関連付けられたレコードの主キーも変更されるようにしたいのですが可能でしょうか?

みんなの回答

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

>どちらにしろ繋ぎ直すしかないと思います。 全く関係ないコードに作りかえるとしても 連鎖更新を使えばつなぎなおしの手間が省けるのでは

sskj
質問者

補足

コードはそのまま使用して変更しないように 県コードフィールドを追加すればよいだけですね。 そもそも県が変わると主キーを変更しなければならない点ですが 変更になるのは一年間で全体の中で0~2件程度でほとんどありません。 連鎖更新で変更可能なので、コードを変更しない形に変更する必要性があるか疑問なのですが・・・。 コードを変更しない理由は特別な意味があるのでしょうか?

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.3

>そうですね・・・。コード用のフィールドを追加して、 これをするとリレーションシップが切れてしまいますよ 県コード用フィールドを追加し、 更新クエリで県コードだけを切り出したものに更新 現在のコードを県コードを除いたものに更新した方がいいのでは もちろん連鎖更新を設定した上でね

sskj
質問者

補足

>現在のコードを県コードを除いたものに更新した方がいいのでは 県コードをテーブルデータとして入れるのはそれでよいのですが、 県コード+番号で一つのコードになっているので、番号だけではどれがどのデータか分かりません。(コードがダブってしまいます。) そのため別の新たなコードを追加すると言うことです。 適当な連番でいいと思います。 それとも二つのフィールドを関連付け?してリレーションシップを 繋ぐということが出来るのですか? どちらにしろ繋ぎ直すしかないと思います。 説明が分かりづらかったようで、すみませんでした。

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

>主のフォームで主キーを変更した場合、 >関連付けられたレコードの主キーも変更されるようにしたいのですが可能でしょうか? 連鎖更新を設定すれば可能です ただし >住所が変わり県が変更になった場合主キーを変更する必要があるのですが これはまずいです データベース設計で一番避けなきゃいけないことですね 歴史があったとしてもどこかで作り変えないと いつまでも問題を引きずることになりますね >VBAの知識がないので県コードは個別に入力しています。 主キーに情報が含まれているのであれば別に県コードフィールドを設ける必要はありません VBAは関係ありません。簡単な関数で県コードを取り出せます

sskj
質問者

お礼

ありがとうございます。 助かりました。 >連鎖更新を設定すれば可能です コードを変えると一時的にサブフォームが消えてしまうので 駄目かと思っていましたが、私の勘違いだったようです。 >いつまでも問題を引きずることになりますね そうですね・・・。コード用のフィールドを追加して、 現在使用しているコードを廃棄する方向で修正したいと思います。 >簡単な関数で県コードを取り出せます 実は一度作っていましたが、色々思うところがあり止めてしまいました。 今考えれば問題なかったのですが。 文字数: Len([地区コード]) 県コード: IIf(Len([地区コード])=4,Left([地区コード],1),Left([地区コード],2)) こんな二段に分けなくとも出来そうですが、まだまだ未熟です。

noname#140971
noname#140971
回答No.1

県コード一覧: ID__県名_____県コード 01__北海道___1001 13__東京_____13199 47__沖縄_____47001 まず、テーブル[県コード一覧]のみを用意すれば事足りると思います。 調査データ: ID__県コード_ID 01______________1 02____________13 03____________47 テーブル[調査データ]では、このように[県コード_ID]だけを記憶します。 調査データクエリ: ID__県コード_ID__県名_____県コード 01______________1__北海道_____1001 02____________13__東京_______13199 03____________47__沖縄_______47001 このように[調査データクエリ]では、いかようにも[県名]、[県コード]は参照できます。 ID__県名_______県コード 01__01:北海道___1001 13__13:東京_____13199 47__47:沖縄_____47001 コンボボックスで選択することを考えた場合、県名の入力をこのように工夫したが良いかも知れません。 >VBAの知識がないので県コードは個別に入力しています。 ともかく、この点は、これで改善できます。

sskj
質問者

お礼

ありがとうございます。 参考になりました。

関連するQ&A