• ベストアンサー

フォームの作り方 アクセス2000

アクセス2000を使い始めた初心者です。 顧客群に関するテーブルAがすでにあります。 このテーブルは事情があって、フィールドを追加することはできません。 もうひとつのテーブルBを作って、こちらに情報を追加するためのフィールドをいくつか作ります。 やりたいことは、 入力用のフォームに、テーブルAの情報内容を表示させて、テーブルBの入力をしたいのです。 クエリを作ってリレーションを設定するのだろうと思うのですが、具体的に進め方がわかりません。 よろしくお願いします。

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

  • ベストアンサー
  • tak2003
  • ベストアンサー率32% (174/540)
回答No.3

リレーションとは複数のテーブルやクエリーを決まった規則に基づいて結合するものです。 テーブルA  名前   住所   TEL 赤崎   東京都  03-XXX-XXXX 井川   神奈川  045-XXX-XXXX 上野   神奈川  045-XXX-XXXX 榎本   沖縄   XXX-XXX-XXXX テーブルB 名前   役職   年収 赤崎   社長   2000 井川   専務   1500 佐藤   鍋奉行   500 AとBのテーブルがあり、名前でリレーションをA=Bでリレーションした場合はAとBの両方にあるデータを抽出します。 A→Bの場合はAの全てのデータとA=Bのデータを抽出します。 A←Bの場合はその逆です。 クエリー作成でリレーションをA→Bにしてフィールドを名前、住所、年収などで構成して、結果を見てください。理解できると思います。 デザインと実行とSQLが切り替わる左上のボタンをクリックしてSQLを表示させてみてください。 SELECT~と書いてある文字がリレーション設定やフィールドで変化するところを理解すると、ぐっと身近なものになります。 SQLを理解しないで構築をすると後で痛い目にあう時が必ず訪れますので、今のうちにいろいろ遊んでみてくださいね。

mada_mada
質問者

お礼

2回も回答をいただきありがとうございました。 SQLですか、いろいろためしてみます。

その他の回答 (3)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

#2です。補足にお答えします。 テーブルAとテーブルBのリレーションとして考えればテーブルBに同じキーを持つレコードが重複するかしないかでリレーションの取り方が違います。 テーブルAのレコードはキー重複なしで1、テーブルBの同じキーを持つレコードが1レコードで良ければ1対1のリレーションで。 テーブルBの同じキーを持つレコードが2レコード以上重複するテーブル構成なら1対多のリレーションをとる。 1対多のリレーションは通常例では顧客情報と売上情報のような1顧客に対して売上毎にテーブルBのレコードが増えていくような構成の時に使います。madamadaさんというお客さんに対して10/1の売上のレコード・10/2の売上レコードという感じです。そうするとテーブルBのレコードをmadamadaさんでSelectするとテーブルBのキーがmadamadaさんの売上レコードが抽出できるという風に使います。

mada_mada
質問者

お礼

2回も回答をいただきありがとうございました。 いろいろ試してみます。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

顧客の情報は表示のみで良いのですよね。 テーブルBに顧客テーブル(テーブルA)のキーを保存するフィールドと追加分のフィールドを作りテーブルAとテーブルBのキー同士でリレーションします。追加のフィールドが1レコードですむのなら1対1でも良いし複数レコード必要なら1対多のリレーションをとる。 そしてテーブルBの選択クエリを作りテーブルAを追加してテーブルAの必要な部分のフィールドを追加する。 そのクエリを元にフォームを作成する。 フォームのキーになる部分をコンボボックスにしてテーブルAの情報から選択できるようにすれば良いと思いますが。 順序立てて進めるのならこの順番が良いのではないでしょうか。 リレーションなどフォームを作りながらSQLスタートメントで作っていったり途中を端折ったりできますけど。進め方を考えてやるならやはり順序立ててが良いと思いますよ。

mada_mada
質問者

補足

回答ありがとうございます。 #1の回答者のかたのような事例のテーブルA、Bの場合は、一対一のリレーションでいいのでしょうか。 よろしくお願いします。

  • tak2003
  • ベストアンサー率32% (174/540)
回答No.1

まずはフォームを選択してデザインでテーブルAのデータを表示するフォームを作成します。 基になるテーブル/クエリにテーブルAを選択します。 後はリストボックスで全てのフィールドを表示するか、テキストボックスをフィールド分作ってそれぞれにフィールドを設定します。お好みでデザインしてください。 テーブルBの入力テキストボックス作成 テキストボックスのプロパティにテーブルBのフィールドを選択します。 基本的な事はテキストボックスを並べてプロパティを設定するだけで動きます。 マクロを使えば入力制限や入力なしのときにメッセージを出すことが出来ます。活用してください。 クエリーはテーブルAの情報の並べ替えや検索、重複データの抽出や削除などを行った結果を登録しておくことが出来ます。 勿論、クエリーによって抽出されたデータを使って更にクエリーを作ることも出来ます。(実行に時間が掛かることもありますので作るときは良く考えて作ってください。) クエリーの結果をテーブルにすることも可能です。 リレーションとはテーブルAとテーブルBを結合します。 テーブルAのフィールドのデータと同じフィールドのテーブルBデータを抽出したりできます。 同じフィールドが無いとリレーションできませんので注意です。 例 テーブルA       テーブルB ID NAME  ADRS     ID JOB  TEL  1 阿部  東京都    1 弁護士 123-4567 2 伊藤  神奈川県   2 裁判官 456-7890 3 牛島  青森     3 警察官 789-0123 この場合はIDでリレーションします。 結合方法によって(内結合と外結合)テーブルAにあるデータ全て、テーブルBにあるデータ全て、テーブルAとBに存在するもので結合します。データが無いテーブルのフィールドにはNullが表示されます。

mada_mada
質問者

補足

回答ありがとうございます。 リレーションをやってみました。 テーブルAのIDをテーブルBのIDにドラッグして 矢印がAからBになりました。 一対一になりました。 結合プロパティを2番目の テーブルAの全レコードとテーブルBの同じ結合フィールドのレコードだけを含める。(意味がよくわかりません)にしました。 クエリーはウイザードを使用してテーブルBのフィールドから選択し、つぎにテーブルAのフィールドを選んでみました。 そして、表示したいフォームをつくり、レコードソースをこのクエリーにしてみたところ、できたように思えます。 これでいいのでしょうか。 リレーションが言葉も含めてよくわかりませんが、、、、

関連するQ&A