• ベストアンサー

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
質問者

補足

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

関連するQ&A

  • Accessでのフォーム入力エラー

    顧客管理を 顧客マスタ 受注明細 入金明細のテーブルを作成し、リレーションシップの設定をしてあります。テーブルには、この形で入力できるのですが、フォームをウィザードを使って作成(サブフォームのリンクされたフォーム)しました。 新規入力することができません。「テーブル’顧客マスタ’にリレーションシップが設定されたレコードが必要なので、レコードの追加や変更をおこなうことはできません。」のメッセージが出ます。 どうしていいのか、わかりません。教えてください。

  • アクセスのフォーム画面で表示したレコードを複写するには

    Accessのフォームで、表示した情報をそのまま最新レコードに追加する方法はありますか? ちなみにテーブルを4つリレーションシップを組んでいます。 最後に連結するテーブルのため、先にデータ入力する必要があるためリレーションシップ上の複写エラーは出ない構造です。

  • Accessのフォーム、選択肢を非表示にしたい

    Accessの参照専用フォームから、テーブルで作成したルックアップウィザードの▼を表示させない方法を教えて下さい Windows7、Access2010を使い、仕事でデータベースを作成しています。 テーブルにルックアップウィザードを使い、選択肢からデータ入力ができるようにしました。 そのテーブルをフォームにして、参照専用にするため、プロパティシートのデータタブで、設定を行いました。 このフォームは、見るだけにしたいので、見た目も整えたいのです。 この状態だと、テーブルでセットしたルックアップウィザードの▼が、画面上に表示されたままになってしまいます。 必要がないので、非表示にしたいのですが、やり方が分かりません。 ご教授をお願いします。

  • Accessのフォームについて教えてください。

    こんばんは。アクセス入門者です。 入門書やできるシリーズなどいくつかのアクセスの本を見たのですが、 フォームについて、理解できません。 ●担当者マスタ ■客先マスタ ★コードマスタ ▲売り上げ計画マスタ ◎売上げ結果マスタ テーブルを作り、それぞれのテーブルから必要な項目を集めて、クエリを作成しました。思ったとおりの結果になったので、これを元にフォームを作成しました。 思ったとおりの結果が表示されるのですが、このフォームに入力が出来ません。できなかったので、次の方法を試しました。 ★コードマスタと▲売り上げ計画マスタのデータをサブフォームに配置しデータを追加させようと思って、あらたにフォームを作りました。やはり、思ったとおりの表示はされるのですが、追加ができないのです。それぞれのテーブルには、★コードマスタを主にそれぞれ、一対多にリレーションを組んでいます。 1つのフォームで色々なテーブルに結果を反映できるように、参照整合性の更新、削除にもチェックを入れました。 この考えは間違っているのでしょうか。 ○○マスタとあるように、それぞれ1つのテーブルに1つのフォームにしなければならないのでしょうか。 複数のテーブルから取り出したデータの更新は無理なのでしょうか。 ある程度、クエリまで完成したのにフォームでつまずいて苦しんでいます。ご解答宜しくお願い致します。

  • アクセスのフォーム

    アクセスでウィザードを利用して入力フォームを作りました。 当初はテーブルにあるデータがフォームにも反映されていたのですが、いろいろといじっているうちに、フォームのデータが消えてしまいました。コントロールソースをいじってみたのですが、直りませんでした。 フォームにも、テーブルのデータを反映させるためにはどこを直したらよいか教えて下さい。よろしくお願いします。

  • フォーム作成で  その1

    「フォームウィザード」を使用して作成している中で、  2番目の画面に”データの表示方法”がありますよね、  それで、そのとき左側に「by T得意先マスターとか  by T担当者マスター」とういうような"by"から始まる  テーブルが表示されます。表示されるテーブルは、  これから作成するフォームと関係があるものだというこ と(リレーションシップ)いう認識でいいのですよね?  またその表示の中で、"by"の意味は?  そして、とりあえず元になるデータを"Q得意先マスター"を選んでいるのに、それではないものが、表示されているのは、使うクエリのデータには、それらのテーブルを  使用しているからでしょうか?

  • アクセス:フォームを閉じずにデータ更新するには

    みなさん、おはようございます。 データベースアクセスについて質問させていただきます。参考書やこちらの質問等もしらべましたが回答が得られなかったので質問致します。 現在、アクセスで病院のベッドを管理するアプリを開発中です。 ひとつのフォームに全病棟のベッドを表示するため500以上のコントロールを配置しておりますが、 すべて非連結にして、フォームを開くときのイベントプロシージャーにクエリを開いてすべてコントロールにテーブルのデータをはめていくように設計しています。 で、問題はこのフォームを開いたまま最新のデータに更新させたいのですが、再クエリーではうまくいきませんでした。 なぜうまくいかないのか理由はわかっていません(プログラマーの方ならうまくいかなくて当然とおっしゃるかもしれませんが) で、仕方なく、一定間隔の時間ごとにフォームを閉じて開くという方法を取っています。 この方法では遅いマシンだと再表示に時間がかかるのできっとほかにスマートなよい方法があるとおもっているのですがプログラミングのスキルが乏しいため詰まっております。 お知恵をお借りできれば幸いです。

  • Access2000のフォームに関する悩み

    アクセス2000で以下のようなデーターベースの構築に悩んでいます。 『各人がいつどの街へ行ったかを記録するデータベース』です。 ・登録テーブル(登録ID、登録者、登録日) ・行先テーブル(行先ID、登録ID、都道府県、市町村、日時) というようなテーブルを作成し、登録テーブルと行先テーブルをリレーションシップで結びます。 登録テーブルを元にした登録フォームを作成し、行先テーブルを元に表形式の行先フォームを作成し、行先フォームを登録フォームのサブフォームとして組み込みます。 尚、都道府県と市町村の入力は各マスタテーブルを作成し、コンボボックスから選択させ、クエリを使って都道府県から市町村の絞込みを実施させます。 ここで、今回の悩みですが、以下の(1)(2)を至急解決しなければならないことです。 (1)データを入力していくと市町村の絞込みができない(表示されないとか前のデータが表示される) (2)テーブルにはデータが入力されているが、フォーム上では空欄になってしまう。 (1)は行先フォーム上では解決できております。 (2)については私の腕ではなすすべもなく途方に暮れている状態です。 どなたか、助けて下さい。よろしくお願いします。

  • ACCESS2003フォーム入力

    ACCESS32003のフォームウィザードで作成した単票形式フォームで、データを表示することはできるのですが、データを変更(入力)することができません。 XP(SP3)でSqlserver2005のテーブルをODBC接続している環境です。 テーブルリンクは問題ありません。 フォームプロパティのデータ入力用を『はい』にしましたができませんでした。 入力可能にする方法を教えてください。宜しくお願いします。

  • Access フォーム上でのテキストボックスとテーブルの連結

    フォームヴィザードからフォームを作成すると、 テキストボックスと指定したテーブルを連結させることができるのですが、デザインビューでそれをするときに、テキストボックスのプロパティのコントロールソースにテーブル名を入れれば連結できるのかと思いきや、うまく表示されません。どこを設定すればテキストボックスとテーブルを連結できるのでしょうか?

専門家に質問してみよう