- ベストアンサー
Accessでの連鎖更新について
- Accessでの連鎖更新についての質問です。T商品マスタとT部品の関係をキーを使用して1対多の関係にしていますが、エンティティやクエリの作り方が分からず困っています。
- T商品マスタとT部品の関係について、T商品マスタのレコードのみ表示させて、備考を入力した場合にT部品のすべてのレコードに同じ備考を登録する方法が分かりません。
- 調査した結果、連鎖更新を行う方法があることを知りましたが、初心者でエンティティの作成画面でエラーが発生してしまうので困っています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
【お詫び】補足は一部撤回します。 撤回:[売上伝票].[部品台帳_ID]というテーブル設計はありえない。 他のテーブルに[部品台帳]のデータをリンクという形で紐付けして参照するのは大いに問題あります。仮に、そういう形で参照していると、その後に[部品台帳]を変更すると全ての[売上伝票]の参照データが書き換わることになります。こういう連鎖更新が許されるケースは、ほとんどありません。そういうことで、参照時点の各データをコピーするというのが一般的。こういう設計だと、[部品台帳]のデータに誤りがあって訂正したら、それは次回参照から反映されるだけ。過去に遡ってデータが自動訂正されることを防げます。 【重複キーと言う考え】 [部品台帳].[商品台帳_ID]・・・1、2、3・・・・N [部品台帳].[部品番号]・・・・・・1、2、3・・・・N という設計もあるかと思います。が、この場合には、入力フォームのVBAが多少難しくなります。例えば、1、2、3と連番を付与していた場合、2を削除すると連番が崩れて1、3になります。その場合には、削除と同時にVBAで[部品番号]を更新します。もちろん、こういう訂正を許すためには、他のテーブルで[部品台帳]データをリンク参照することは許されません。 *伝票明細などは[行番号]で管理するのは当たり前。でも、マスターの従表を同様な恰好で管理するのか、(回答1のように)安直にシリアル番号を付与するだけで逃げるのか?そこら辺りは、全体のルールに従ったがよいと思います。 以上、補足の一部を撤回すると同時に、重複キーという考えもありえるということを追記しておきます。
その他の回答 (3)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】サブフォームの先頭列を1、2、・・・Nと表示するには? 1、[部品台帳].[ID]を非表示にする。 2、先頭に列[行番号]を追加して連番を付与する。 ・テーブル[部品台帳]には、列[行番号]の追加は無用。 列[部品台帳].[ID]は、テーブル[売上伝票明細].[部品台帳_ID】に記録するのに必要な列。いわば、テーブル設計上必要なそれ。よって、ユーザが見る必要も、知る必要もない。そういうことで、入力フォームでは非表示にし、1行目データ、2行目データという形で表示することもありです。 と、これだけを補足しておきます。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)