- 締切済み
Access 主キーの変更について
調査データの集計、蓄積用のDBを制作しております。 制作しているDBは主キーに県コードが含まれています。 そのため、調査データの住所に変更があるとコードを変えなければなりません。 AccessでのDBはほぼ完成しており、今からコードの形態を変更することは避けたいです。(もともと古い独自のDBのデータを流用しています。) 現在、主キーに県コードが含まれていますが、それとは別に県コードフィールドを設けています。 ※コードの形態 (先頭の二桁又は一桁が県コード、コードは4桁又は5桁) 例 主キー 北海道 1001 東京 13199 沖縄 47001 新規のデータを入力する際に主キーを入力しているのですが VBAの知識がないので県コードは個別に入力しています。 住所が変わり県が変更になった場合主キーを変更する必要が あるのですが一対多でリレーションシップをいくつもしてあり サブフォームなども使用してます。 主のフォームで主キーを変更した場合、関連付けられたレコードの主キーも変更されるようにしたいのですが可能でしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- CHRONOS_0
- ベストアンサー率54% (457/838)
>どちらにしろ繋ぎ直すしかないと思います。 全く関係ないコードに作りかえるとしても 連鎖更新を使えばつなぎなおしの手間が省けるのでは
- CHRONOS_0
- ベストアンサー率54% (457/838)
>そうですね・・・。コード用のフィールドを追加して、 これをするとリレーションシップが切れてしまいますよ 県コード用フィールドを追加し、 更新クエリで県コードだけを切り出したものに更新 現在のコードを県コードを除いたものに更新した方がいいのでは もちろん連鎖更新を設定した上でね
補足
>現在のコードを県コードを除いたものに更新した方がいいのでは 県コードをテーブルデータとして入れるのはそれでよいのですが、 県コード+番号で一つのコードになっているので、番号だけではどれがどのデータか分かりません。(コードがダブってしまいます。) そのため別の新たなコードを追加すると言うことです。 適当な連番でいいと思います。 それとも二つのフィールドを関連付け?してリレーションシップを 繋ぐということが出来るのですか? どちらにしろ繋ぎ直すしかないと思います。 説明が分かりづらかったようで、すみませんでした。
- CHRONOS_0
- ベストアンサー率54% (457/838)
>主のフォームで主キーを変更した場合、 >関連付けられたレコードの主キーも変更されるようにしたいのですが可能でしょうか? 連鎖更新を設定すれば可能です ただし >住所が変わり県が変更になった場合主キーを変更する必要があるのですが これはまずいです データベース設計で一番避けなきゃいけないことですね 歴史があったとしてもどこかで作り変えないと いつまでも問題を引きずることになりますね >VBAの知識がないので県コードは個別に入力しています。 主キーに情報が含まれているのであれば別に県コードフィールドを設ける必要はありません VBAは関係ありません。簡単な関数で県コードを取り出せます
お礼
ありがとうございます。 助かりました。 >連鎖更新を設定すれば可能です コードを変えると一時的にサブフォームが消えてしまうので 駄目かと思っていましたが、私の勘違いだったようです。 >いつまでも問題を引きずることになりますね そうですね・・・。コード用のフィールドを追加して、 現在使用しているコードを廃棄する方向で修正したいと思います。 >簡単な関数で県コードを取り出せます 実は一度作っていましたが、色々思うところがあり止めてしまいました。 今考えれば問題なかったのですが。 文字数: Len([地区コード]) 県コード: IIf(Len([地区コード])=4,Left([地区コード],1),Left([地区コード],2)) こんな二段に分けなくとも出来そうですが、まだまだ未熟です。
県コード一覧: 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の知識がないので県コードは個別に入力しています。 ともかく、この点は、これで改善できます。
お礼
ありがとうございます。 参考になりました。
補足
コードはそのまま使用して変更しないように 県コードフィールドを追加すればよいだけですね。 そもそも県が変わると主キーを変更しなければならない点ですが 変更になるのは一年間で全体の中で0~2件程度でほとんどありません。 連鎖更新で変更可能なので、コードを変更しない形に変更する必要性があるか疑問なのですが・・・。 コードを変更しない理由は特別な意味があるのでしょうか?