- ベストアンサー
フォームの作り方 アクセス2000
アクセス2000を使い始めた初心者です。 顧客群に関するテーブルAがすでにあります。 このテーブルは事情があって、フィールドを追加することはできません。 もうひとつのテーブルBを作って、こちらに情報を追加するためのフィールドをいくつか作ります。 やりたいことは、 入力用のフォームに、テーブルAの情報内容を表示させて、テーブルBの入力をしたいのです。 クエリを作ってリレーションを設定するのだろうと思うのですが、具体的に進め方がわかりません。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
リレーションとは複数のテーブルやクエリーを決まった規則に基づいて結合するものです。 テーブル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を理解しないで構築をすると後で痛い目にあう時が必ず訪れますので、今のうちにいろいろ遊んでみてくださいね。
その他の回答 (3)
- O_cyan
- ベストアンサー率59% (745/1260)
#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さんの売上レコードが抽出できるという風に使います。
お礼
2回も回答をいただきありがとうございました。 いろいろ試してみます。
- O_cyan
- ベストアンサー率59% (745/1260)
顧客の情報は表示のみで良いのですよね。 テーブルBに顧客テーブル(テーブルA)のキーを保存するフィールドと追加分のフィールドを作りテーブルAとテーブルBのキー同士でリレーションします。追加のフィールドが1レコードですむのなら1対1でも良いし複数レコード必要なら1対多のリレーションをとる。 そしてテーブルBの選択クエリを作りテーブルAを追加してテーブルAの必要な部分のフィールドを追加する。 そのクエリを元にフォームを作成する。 フォームのキーになる部分をコンボボックスにしてテーブルAの情報から選択できるようにすれば良いと思いますが。 順序立てて進めるのならこの順番が良いのではないでしょうか。 リレーションなどフォームを作りながらSQLスタートメントで作っていったり途中を端折ったりできますけど。進め方を考えてやるならやはり順序立ててが良いと思いますよ。
補足
回答ありがとうございます。 #1の回答者のかたのような事例のテーブルA、Bの場合は、一対一のリレーションでいいのでしょうか。 よろしくお願いします。
- tak2003
- ベストアンサー率32% (174/540)
まずはフォームを選択してデザインでテーブル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が表示されます。
補足
回答ありがとうございます。 リレーションをやってみました。 テーブルAのIDをテーブルBのIDにドラッグして 矢印がAからBになりました。 一対一になりました。 結合プロパティを2番目の テーブルAの全レコードとテーブルBの同じ結合フィールドのレコードだけを含める。(意味がよくわかりません)にしました。 クエリーはウイザードを使用してテーブルBのフィールドから選択し、つぎにテーブルAのフィールドを選んでみました。 そして、表示したいフォームをつくり、レコードソースをこのクエリーにしてみたところ、できたように思えます。 これでいいのでしょうか。 リレーションが言葉も含めてよくわかりませんが、、、、
お礼
2回も回答をいただきありがとうございました。 SQLですか、いろいろためしてみます。