• ベストアンサー

ACCESSのフォームについて

いつもお世話になっております。 Accessですでにあるデータベースに新しいマスタを追加し、テーブルに挿入しました。リレーションシップで連結しました。  フォームに新しくそのデータを表示するテキストボックスを作ったのですが、プロパティのコントロールソースに新しいマスタの項目がなく、新しいマスタのデータを表示できません。 新しいマスタを後から追加した場合、もう一度フォームウィザードで作り直す方法しかないのでしょうか? 普通は設計段階でこのようなことがないようにすると思いますが、なにぶん、データベースに関しては初心者なのでこのようなことになってしまいました。 どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • igatom
  • ベストアンサー率28% (9/32)
回答No.8

こんにちは No.1 & No.3 の igatomです。 No.3の mskhasさんの補足で判ったことですが もしかしたら私の今までの説明は 的が外れています。 私が察知するに 新しく作成したテーブルのをデータを既存のテーブルに保存したいと言うことでしょうか? 例えば・・・ [ ________ は無視してください スペースが必要幅あかないのでこうしました] 【仕入先マスター】 <仕入先番号><仕入先> 001_______________あいうえお商事 002_______________かきくけこ商会 003_______________さしすせそ企画 【物品マスター】 <物品番号><仕入先><物品名> AAA____________001_______愛媛みかん BBB____________001_______和歌山みかん CCC____________001_______高知みかん DDD____________002_______信州りんご EEE_____________002_______青森りんご FFF_____________003_______山形さくらんぼ 【保管場所マスター】 <保管場所番号><保管場所> aaa__________________本社倉庫 bbb__________________仕入先倉庫 ccc__________________出荷センター ddd__________________関西支店 【在庫データ】 <在庫管理番号><物品><保管場所><在庫数><仕入値> 1001________________AAA____ccc________________50________30 1002________________FFF____aaa_______________100________35 1003________________DDD____aaa________________75________50 『リレーション情報』 【物品マスター】の<仕入先> と 【仕入先マズター】の<仕入先番号> が 1対1のリレーション 【在庫データ】の<物品> と 【物品マスター】の<物品番号> が が 1対1のリレーション 【在庫データ】の<保管場所> と 【保管場所マスター】の<保管場所番号> が が 1対1のリレーション という環境で 【在庫データテーブル】内に<保管場所>を追加したいのでしょうか? (上の環境例では既に追加された形になっていますが・・・) その場合【在庫データテーブル】内に保管場所(もしくは保管場所番号)を格納するフィールドがありますか? と言うか【在庫データテーブル】に<保管場所フィールド>を追加しましたか? 追加されていればコントロールソースの中に 「aaa」が表示されるか「本社倉庫」が表示されるかは別として<フィールド名>が表示されるハズです。 通常は上例のようにリレーションを組み「aaa」が格納されるよう設計します。しかし「本社倉庫」と表示させたければ ここで初めてクエリー(もしくは クエリービルダー)が必要になります。 もし 私の回答が 的外れの場合は その旨と 「クエリーとは なんぞやが解るか」「クエリーとテーブルの違いが解るか」「クエリーが作れるか(SQLが書けるかと言う意味ではありません)」を併せてお知らせください。 また、そのフォームの目的はなんですか? 在庫データの入力用ですか? その場合だと 【管理場所マスター】から選択して 【在庫データテーブル】に格納するなどのニーズになってくると全く対応が変わってきます。 すぐには回答できないかもしれませんが 他の方がフォローできるかもしれませんので補足をお願いします。

mskhas
質問者

お礼

本当に丁寧な解説ありがとうございました。今回の件は、クエリを作ることで解決しました。まだまだ勉強不足だと痛感いたしました。そんな中での、応援や数回にわたる解説ありがとうございました。

その他の回答 (7)

  • sanbit
  • ベストアンサー率32% (16/50)
回答No.7

No6sanbitです。 1部追加です。 この画面で「管理場所マスタ」を貼り付け(右クリックでメニュが出ます)。 管理場所マスタの必要な項目をフィールドへドラッグ&ドロップしてください。 この画面をとじます(保存はい) 続いて、フォームをデザインビューてアイコンバーのフィールドリストの項目をテーブルにドラッグ&ドロップして下さい。 お役に立てば幸いです。

  • sanbit
  • ベストアンサー率32% (16/50)
回答No.6

No4 sanbit です。No3さんへの補足でよく解りました。 既存のフォームをデザインビューで開きレコードソースの「…」→SQLクエリビルダの画面がでます この画面で「管理場所マスタ」を貼り付けます(右クリックでメニュが出ます)。 この画面をとじます(保存はい) 続いて、フォームをデザインビューてアイコンバーのフィールドリストの項目をテーブルにドラッグ&ドロップして下さい。 これでいけるはずです。トライしてみて!

mskhas
質問者

お礼

お忙しい中、アドバイスありがとうございました。クエリを作ることで、今やりたいことは解決しました。本当にありがとうございました。もっともっと勉強したいと思います

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.5

ひょっとして、 > 新しいマスタを追加し、テーブルに挿入 というのは、テーブルで、サブテーブルを表示できるように設定した、ということでしょうか。 だとすると、その変更は、コントロールソースには反映されません。 (ウィザードでフォームを造り直したとしても、今と同じ結果になります) 既存フォームでそのマスタを表示させたいのでしたら、No.4の方が回答されている通り、サブフォームで表示させるのがよいと思います。 なお、サブフォームを追加する際には、フォームをデザインビューで開いたときに表示される「ツールボックス」ツールバーの「コントロールウィザード」(左から2番目)をオンにしておけば、サブテーブル追加時と同様のウィザードが立ち上がります。 (「サブフォーム」を追加するためのボタンは、上記ツールバーの、右から3番目(Access97の場合。お使いのバージョンでは多少違うかも)にあります) 但し、もし既存フォームが「帳票型」か「データシート型」に設定されている場合は、サブフォームを設定できませんので、既存フォームで表示しているデータは「単票型」にするしかなくなります。 (テーブルでのサブテーブルのような表示はできない、ということ) 以上、参考までに。

  • sanbit
  • ベストアンサー率32% (16/50)
回答No.4

既存のフォームにサブフォームを追加作成してください。 追加作成の際、リレーション設定した新しいマスタ(レコードソース)を選択 これでリレーション設定した内容のデータを連動し同時に表示する筈です。 ご質問の趣旨と違っている場合はごめんなさい。

  • igatom
  • ベストアンサー率28% (9/32)
回答No.3

ANo1 の igatom です。 コントロールソース…コントロール(コンボボックスやテキスト)のデータ名でつまりはテーブルの中のフィールド名を選ぶことです レコードソース・・・そのフォーム自体はなんのテーブルを参照しているかでつまりはテーブル名を選ぶことです。 クエリービルダーを活用する場合ですが まずは プロパティを出せますか? そのプロパティはコントロール(コンボボックスやテキスト)のプロパティと フォーム自体のプロパティとで違いがわかりますか それぞれ出せますか? クエリービルダーは フォームのプロパティ内の レコードソースにクリックを入れると ドロップダウンの▼とその隣に「…」のボタンがでてきます。その「・・・」を クリックするとクエリービルダー が出ます。 もしプロパティ自体が判らない・出せないのであればデザイン画面でどこかをダブルクリックしてみてください。 プロパティが出てきます。その後でなにかコントロールをクリックすれば そのコントロールのプロパティが 縦と横の目盛り(ルーラー)のデザイン画面上(フォーム内)の左上交点 (何もない四角の部分)クリックすれば フォーム自体のプロパティに切り替わります。 がんばれぇ~~!!

mskhas
質問者

補足

丁寧な補足ありがとうございます。 コントロールソースとレコードソースの違い何となくわかりました。それぞれのプロパティの出し方やビルダーの出し方もわかりましたが、その後、どのような操作をすればいいかがわかりません。 私の説明が不足していたかもしれませんので、もう一度確認させて下さい。 テーブルには在庫データ、仕入先マスタ、物品マスタなどがあり、それぞれID等でリレーションしてあり、フォームで表示させています。フォームを作った後で、管理場所マスタを作りましたが、フォームを作った後なので、その管理場所マスタがコントロールソースにはなく、フォームで連結できないということです。 お手数ですが、初心者の私が理解できますように再度補足していただけないでしょうか よろしくお願いいたします

  • lemon2
  • ベストアンサー率20% (1/5)
回答No.2

ツールバーの中に フィールソリストがありますが これをひらくと テーブルに定義したフィールト(後から追加も含めて) 表示されます また フォールのソースがテーブルでなく クエリーの場合はクエリーに定義された フィールドがでます

  • igatom
  • ベストアンサー率28% (9/32)
回答No.1

テーブルのリレーションシップを張っただけではフォームのコントロールソースは反映されません。 フォーム自体のレコードソースを替える必要があります。普通はレコードソースはテーブルと 思いがちですがテーブルが複数になる場合はクエリーを指定します。 2つのテーブルを基にしたクエリーを作ってそれをレコードソースにするか そのクエリーが そのフォーム以外で使用しないのでわざわざクエリーを増やすのが嫌であればプロパティ内の レコードソースの所からクエリービルダーを使用してそのフォームだけの クエリーを作ることもできます。

mskhas
質問者

補足

初心者なのでわからないことばかりですみません。 レコードソースとコントロールソースは同じ意味でしょうか? クエリビルダーとはどのように立ち上げるのですか?