プロが教える店舗&オフィスのセキュリティ対策術

アクセスの初心者です。
多くのアクセスのテキストに、顧客名が1つ(のテーブルに)あれば、重ねて(他のテーブルに)表示する手間が省略できる、と書かれています。
顧客先が3000人いる場合、ルックアップリストから選択するのが、それを示しているのか、それとも、そうではなく、違う方法が一般的なのか、お知らせください。
顧客が3000人いる場合、顧客基本情報(住所等)テーブルと売上名簿テーブルの作り方です。あいうえお商事に鉛筆1000本を売った。あいうえお商事の会社IDは「2137」とします。「2137」があいうえお商事だということを、記憶しているはずがありませんので、売上名簿テーブルのなかに、あいうえお商事である「2137」に「鉛筆1000本」とするには、どうするのか、ということです。
よろしくお願いします。

A 回答 (3件)

ルックアップリストというのはあまり聞かない表現ですが


テーブルデザインビューのルックアップウィザードで作られる
コンボボックスのことでしょうか

「顧客基本情報」というテーブルがあり
「売上名簿テーブル」でこの情報を使用したい場合
「売上名簿テーブル」には「顧客基本情報」の顧客IDだけを参照キーとして取り込むことになります

このときテーブルデザインビューの顧客IDフィールドのデータ型欄で
ルックアップウィザードを選び、表示するテーブルに顧客基本情報を選択
使用するフィールドに顧客IDと顧客名を選び、キー列は表示しないとすると
連結列は顧客IDで表示が顧客名のコンボボックスができあがります

この場合入力作業は顧客IDを入力するのではなく顧客名を選択して行うことになります
(売り上げ名簿テーブルに格納されるのは連結列の顧客IDの方です)
選択元が3000もあると大変そうに思えますが
コンボに入力していくと入力されたものと先頭から一致するところまでジャンプしますから
「あいうえお商事」だとすると「あいうえ」ぐらいまで入力してドロップダウンすると
近くにあるはずだからそこから選択します

高級なテクニックとしてはグループ分けしておいて
グループを選ぶとグループに属するものだけが表示されるというように
段階的に絞り込んでいくようなインタフェースを作る場合もあります
    • good
    • 0

>顧客名が1つ(のテーブルに)あれば、重ねて(他のテーブルに)表示する手間が省略できる


>ルックアップリストから選択するのが、それを示しているのか
>そうではなく、違う方法が一般的なのか、お知らせください
テキストに書いてあるのはルックアップリストから選択することを示しているのではなくリレーショナルデータベースの特徴である主キーを使って他のテーブルのレコードを使用して一つのテーブルのように扱う事を言っています。
データベースの正規化と言いますがデータのメンテナンス性の効率を高めるためにデータベース内で同じ情報が複数保存されないよう各テーブルは主キーから直接連結されるデータだけで構成されるように設計構築するようになっています。
質問内容からいえば売上名簿テーブルの会社IDが[2137]ならそのキーを元に顧客基本情報テーブルに保存されているIDが[2137]のレコードを探し該当する[あいうえお商事]を抽出し表示するという事です。
売上名簿テーブルに顧客先名がなくても会社IDがあれば顧客基本情報テーブルから必要な顧客先名や住所などを持ってこれます。
>「2137」があいうえお商事だということを記憶しているはずがありませんので
上記に書いたように売上名簿テーブルに会社IDがあって顧客先名がなくても顧客基本情報テーブルに[2137]は[あいうえお商事]と記憶(保存)してあるので[2137]というキーを見て[あいうえお商事]を抽出します。
>売上名簿テーブルのなかにあいうえお商事である「2137」に「鉛筆1000本」とするにはどうするのか
売上名簿テーブルの売上No・会社ID・製品名?・数量?と顧客基本情報テーブルの会社ID・顧客先名のフィールドを使います。
顧客基本情報テーブルの会社IDと売上名簿テーブルの会社IDでリレーションを取り1対他の結合にします。(同じ会社が複数の売上があっても全ての売上に対応するため)
SQLを使うかクエリで表示するようにします。
SQLなら

SELECT 売上名簿テーブル.売上No,売上名簿テーブル.会社ID,顧客基本情報テーブル.顧客先名,売上名簿テーブル.製品名,売上名簿テーブル.数量
FROM 顧客基本情報テーブル INNER JOIN 売上名簿テーブル ON 顧客基本情報テーブル.会社ID = 売上名簿テーブル.会社ID;

上記のSQLで売上No・2137・あいうえお商事・鉛筆・1000という並びになります。
クエリで作成する場合は新規クエリで選択クエリを選び売上名簿テーブルを元に売上No・会社ID・製品名・数量を選択し顧客基本情報テーブルから顧客先名を選択すれば出来ます。(リレーションシップでリレーションを取っていれば)
リレーションを取っていない場合は売上名簿テーブルを元に売上No・会社ID・製品名・数量を選択してクエリを作りテーブルの追加で顧客基本情報テーブルを追加して会社ID同士をドラッグして結合し売上名簿テーブルの全レコードと顧客基本情報テーブルの同じフィールド・・の結合にします。顧客先名をクエリのフィールドに追加すれば同様になります。
    • good
    • 0

テキストは、テーブル(表)のリレーションシップに関しての説明です。


例えば、次のような<顧客名簿>と<売上伝票>ちう2表があるとします。

<顧客名簿>
ID_________________1
Name____________鈴木 一郎

<売上伝票>
ID________________1
顧客名簿_ID__1
売上日__________2006/03/03
商品名__________Coffee
税込単価_______\1000
数量_____________1.00

この場合、<顧客名簿ID>と<売上伝票.顧客名簿_ID>との間にリレーションシップを設定します。

さて、こういう2つの表が存在する場合、

1,鈴木 一郎、2006/03/13,Cofee,\1,000,1.00

というデータの抽出が可能です。
この場合のSQL文は、次のようです。

SELECT 売上伝票.ID, 顧客名簿.Name, 売上伝票.売上日, 売上伝票.商品名, 売上伝票.税込単価, 売上伝票.数量 FROM 売上伝票 INNER JOIN 顧客名簿 ON 売上伝票.顧客名簿_ID = 顧客名簿.ID

このように、リレーショナル・データベース言語では、<売上伝票.顧客名簿_ID=1>を<顧客名簿.Name=鈴木 一郎>に置換して抽出・表示する術が提供されています。

お使いのテキストが、「顧客名が1つ(のテーブルに)あれば、重ねて(他のテーブルに)登録する必要がない」と述べている理由です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す