新しく質問する

サブフォームの中にサブフォーム

役に立った:4件
  • 質問者:shingoogoo
  • 投稿日時:2005/02/01 21:56
  • 困り度:すぐに回答が欲しいです
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

Accessで昔の処方箋をデータベースにしたいです。薬の材料を整理して、薬材料テーブルを作りました。
材料は薬草や動物の一部で、イチジクの実、アカシアの葉、牛の骨の隋、鳥の血などです。植物名や動物名と、使われてる部分の2種類の違いを区分として主か部分、のどちらかに入れます。分けるのは、牛の血、豚の血、牛の骨など、重複した部分を効率よく組み合わせて入力するためです。 
 薬材料テーブルとメインの処方箋テーブルをフォームとサブフォームで繋げてやってみたのですが何故かうまくいかないです。

>処方箋テーブル:処方箋ID(Key:Autonumber)&処方箋の名前(Text)

>薬材料テーブル:薬材料ID(Key:Autonumber)&薬材料の名前(Text)&区分(Text)

>成分テーブル: 成分ID(Key:Autonumber)&処方箋ID (Number)

>中間テーブル:中間ID (Key:Autonumber)&成分ID(Number)&薬材料ID(Lookup to:薬材料の名前)

テーブルのイメージとしては

「処方箋ID  「成分ID   「中間ID   「薬材料ID
 処方箋名   処方箋ID   成分ID    薬材料名
      」      」    薬材料ID」  区分 」

[処方箋ID>処方箋ID] > [成分ID>成分ID] >
[薬材料ID >Look up > 薬材料名]

理想は、メインの処方箋フォームの中に、成分のサブフォーム。成分のサブフォームの中に中間フォーム。 中間フォームでは、プルダウンメニューから薬材料名を選べるというものです。 つまり、処方箋1の1つ目の成分の“イチジク”と“実”をそれぞれ、2つ目は“牛”と“血”とそれぞれ選ぶ、みたいな感じです。

が、この方法だと、フォームで入力時に成分IDと中間IDが自動ナンバーされないで、実質入力ができないです。 
メインフォームの複数のサブフォームを、中間のID(成分IDや中間ID)を使って管理はできないのですか?

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:4件)
  • 参考になった:1件

No.4ベストアンサー20pt

  • 回答者:O_cyan
  • 回答日時:2005/02/10 13:19

No.3は下記の内容です。

処方箋ID 1
   ↓(リレーション)
  中間ID 成分ID 薬材料ID 区分
   1   001    10  (主)
   1   002    11  (部分) で
リストなどは成分IDの順で並べ分析は中間IDと区分でグループ化し薬材料の統計・分析をするという事ですが主と部分の結びつきはありません。するとすれば成分IDは区分的に使い長整数型などで入力し成分IDでもグループ化すれば出来ます。
処方箋ID 1
   ↓(リレーション)
  中間ID 成分ID 薬材料ID 区分
   1   001    10  (主)
   1   001    11  (部分)
   1   002    20  (主)
   1   002    21  (部分)
こんな感じで成分IDで主と部分を結び付けられます。クエリを元にフォームを作れば中間テーブル成分テーブルに書き込めると思います。

shingoogooさんの作った構成では下記のようになるということですね。(中間と成分が逆かもしれませんが)
処方箋ID 1
   ↓(リレーション)
  中間ID 成分ID
   1   001
   1   002
   ↓(リレーション)
      成分ID 薬材料ID
       001    10(主)
       001    11(部分)
       002    20(主)
       002    21(部分)

フォームにすると単票方の中に単票型でその中に帳票型ではひとつの成分の主と部分を入力し中間単票型フォームのレコードを次に進めて次の成分を入力するような格好になるのでは。
処方箋fm内に帳票型のフォームを入れ帳票型のフォームに薬材料のフォームを表示するボタンでも作りリンクするようにした方がキー同士の連携を取るには良いのかもしれません。
取り合えずオートナンバーが振られない状況なら主キーとレコードキーになる副キーとリレーションをとりフォーム同士のリンクも同じリレーションにすれば振られるはずです。

通報する

この回答への補足

分かりやすい構成説明を有難う御座いました。
実際に教えてもらった構成でやってみて、処方箋IDや主と部の振り分けが出来ているのが確認できました。処方箋IDと薬材料IDとの結びつきの間に中間テーブルを置いただけのシンプルな構成なので、管理がしやすいと思いました。フォームもサブフォームの中にサブフォームを作らずに、サブフォームだけで、成分IDの番号は手入力、薬材料はLookUp toで選択入力できました。気になったのですが、クエリを元にフォームを作るというのは、このフォーム構成ではなくて、別の方法を言われているのですか? もしそうなら、そのことについてもう少し教えて欲しいです。お願いします。

  • 参考になった:1件
  • 回答者:O_cyan
  • 回答日時:2005/02/08 18:30

成分テーブルの意味は解りました。
しかし成分テーブルで成分IDと処方箋IDを管理するだけなら
処方箋テーブル.処方箋IDと中間テーブル.中間IDを1対多でリレーション。
中間テーブル:中間ID(超整数型)&成分ID(オートナンバー型)&薬材料ID(Lookup to:薬材料の名前)として
中間テーブル.成分ID(オートナンバー型)と薬材料テーブル.薬材料IDをリレーション
これで処方箋ID→中間IDと成分ID→薬材料IDのリレーションを作り中間テーブルの成分IDで薬材料テーブルから薬材料IDを抽出し区分で分類し統計を取れるのではないでしょうか。

>主と部分が混在する薬材料テーブルから主と部分の関係を効率よく分けて表示したり分析したり出来ますか?
主と部分が混在する薬材料テーブルから効率よく分類等するには薬材料テーブルのレコードの構成ではないでしょうか。
薬材料テーブルの区分で主と部分を判定するフィールドを作る。分類するときは主か部分でグループ化し薬材料名?でグループ化すれば良いのではと思いますが。

通報する

この回答への補足

何度も答えて頂いて有難う御座います。
提案されたテーブルの構成ですが、すこし分かりづらいので聞きたいです。テーブルは全部で3つで。
(1)処方箋テーブルに(処方箋ID、処方箋名)、(2)中間テーブルに(中間ID(超整数型)、処方箋ID、成分ID(オートナンバー)、薬材料ID(Lookupで薬材料テーブル))、(3)薬材料テーブルに(薬材料ID、材料名、区分)となるのでしょうか?
リレーションは、(1)処方箋テーブルの処方箋IDと中間テーブルの処方箋IDの1:M薬材料ID、(2)中間テーブルの薬材料IDと薬材料テーブルの薬材料IDの薬材料IDでしょうか?
 この場合、実質成分IDが処方箋IDと薬材料IDのリレーションを作りますが、中間IDで、薬剤のリストされる順番や、個々の薬材成分の主と部の結びつきをはっきりさせるにはどうすればいいのですか? ひとつの処方箋にある材料を単に複数の主と複数の部がある、というのではなく、それぞれの組み合わせを出したいです。 教えてください。

  • 参考になった:1件
  • 回答者:O_cyan
  • 回答日時:2005/02/03 11:46

>中間IDを整数型にするのは
中間IDを整数型にするのはオートナンバーで処方箋IDが振られた際に中間IDに処方箋IDと同じキーを持ってきてリレーションするためです。

テーブルの構成を見ると成分テーブルは不必要なのではと思いますが。(他の使用目的があるのでしたら別ですが)
処方箋テーブル・中間テーブル(処方箋の内容)・薬材料テーブルで足りるのではないかと思いますけど。
処方箋テーブルに中間テーブルがぶら下がり中間テーブルに薬材料テーブルがぶら下がる構成で足りると思います。
処方箋IDと中間ID間で1対多のリレーションをすれば問題はないはずで処方箋IDを主キーに多側の中間IDは入力したレコード数分の薬材料IDがあるレコードが出来ますので処方箋IDのみで管理できる。
中間テーブルから処方箋IDで抽出すれば1処方箋分のレコードが抽出できる。処方箋テーブルに日付があれば処方箋テーブルの日付を使い何月何日から何月何日までの使用薬材料が集計できる等 管理が楽ではないでしょうか。

>最後の部分に書かれているのはこの構成自体を変更する必要があるのですか
>薬材料も中間IDと共通するフィールドを追加して処方箋IDと中間IDを1レコード内に持つようにするべきではないでしょうか
のことでしょうか・・
テーブルにフィールドを1つ追加するだけなので構成自体を変える必要はないと思います。
データベースを構築する際に各テーブルのレコードは共通するキーを持たせた方が構築も楽でリレーションも複雑にならずシステム自体の管理もやり易い。この考えからです。

通報する

この回答へのお礼

ご教示ありがとうございました。
もう1つ聞かせてください。 
成分テーブルの意味は、1つの処方箋の中に複数使われる薬材料のうち1つを管理し、中間では、その薬材料の主(牛など)と部分(血のど)の組み合わせを作っています。それで、行いたい分析の一つに主と部分の関係の統計があるのですが、例えば、血が使われている処方箋は主に、牛が80%で鳥が12%とか、牛の使われる部分の多くは脂肪で、その次が血であるとか。その場合、この構成で、主と部分が混在する薬材料テーブルから、主と部分の関係を効率よく分けて表示したり分析したり出来ますか?

  • 参考になった:1件
  • 回答者:O_cyan
  • 回答日時:2005/02/02 10:43

構成がちょっと解りにくいのですが・・。
中間ID・薬材料IDをオートナンバーから長整数型にして処方箋IDのオートナンバーを持ってくるように変更すれば出来ると思います。
メインフォームと各サブフォームに共通するキーがない状態だと思うのですが・・。そのため入力できない?
今のテーブルままの構成だと処方箋IDではなく中間IDを主キーに持った方が良いような構成だと思います。
処方箋IDに各レコードをぶら下げるならオートナンバーで主キーを持ち各テーブルのレコードは処方箋IDで管理するようにしないとだめなのでは。
入力時は処方箋IDでサブフォームまで入力し入力時に中間IDを別にふり成分と薬材料も中間IDと共通するフィールドを追加して処方箋IDと中間IDを1レコード内に持つようにするべきではないでしょうか。
そうすれば処方箋IDでも中間IDでもどちら側からでも管理できるのでは。

通報する

この回答へのお礼

迅速なお答え有難う御座いました。
 中間IDを整数型にするのは、入力時に自動で番号がつかないので、あらかじめレコードの分だけ準備しておく必要があるのでしょうか? そうすると、やはり処方箋IDでサブフォームまで入力して、その後薬材料の入力という順番になるのでしょうか?
 あと、最後の部分に書かれているのは、この構成自体を変更する必要があるのですか?
 なにぶん初心者ですので、最後の意味が把握仕切れないです。お願いします。

  
このQ&Aは役に立ちましたか?(役に立った:4件)

このページのトップへ

Facebook公式ページ

公式Twitter