<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--基本操作をさらに考える
   >00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 



この会社では、みんなこういう商品を売って売上を立てています。取扱商品の一覧です。

え?アンパンとかクリームパンじゃかっこ悪い?
なんでもいいですよ。対空ミサイルでもエルメスのくつでも王冠でも麦茶でもなんでも。
まだこんな感じのテーブル作ってない方は、おさらいってことで「商品テーブル」作ってみてください。[値段]だけ数値か通貨型のフィールドにしてもらえれば、あとは全部テキスト型フィールドでオッケーです。で、7〜8件、にぎやかしに商品入力しといてください。


さて、ではここでまた考えましょう。
「誰がいつどの商品をいくつ売っていくら売り上げたのか」という情報を持つためには、どうしたらいいでしょう。

もうだいたいお分かりでしょうか・・・。
そうですね。今、一番細かい情報の単位は「伝票番号」ですけど、その伝票番号の中にさらに細かい階層ができることになりますよね。
ひとつの伝票の中で、いくつかの商品が売れたってことに、なりますよね。え、わかんないですか???そんなー、がんばって考えてくださいよ。

見積書とか請求書とか、ああいう伝票の構図を思い浮かべてください。

↓こういう伝票です。

え?いのちづなは100円なのかって???
そんなことどうだっていいじゃないですかっとにかくよく見てくださいよう。
No0011という伝票の中で、「おおがたちくわ」と「いのちづな」と「くさりがま」、3つの商品が名前を連ねてますよね。で、売上の合計が、この伝票1枚の売上金額。
売り上げる商品は、1つの場合もあるし、左のように3行の場合もあるし、1枚の伝票の中でそのお客さんがいっぱい買ってくれて20行にも30行にもなる場合がありますよね。こういう構造のテーブル、何気に難しいんですよ。みなさんならどうやって考えます?

もちろんいろんなやり方があると思いますよ。ひととおりではありません。
でもそれじゃお話が進まないんで、ここはひとつ、それっぽいものをいっしょに作ってみようではありませんかっ。

でも、大体わかったって人も、いるみたいですね。
こういうテーブルの構造をぱっと思いつくようになると、Accessってわりと簡単なもんですよ。


まず、こんな感じのテーブルを新規に作ります。テーブルの名前は・・・「売上明細商品」テーブルにしようかな(わけわかんなくなりそうだ)

伝票番号 数値型 実は「売上明細」テーブルの[伝票番号]とくっつけようと思っている。
行番号 数値型 いわゆる「明細番号」ってやつだね。1,2,3・・・と順繰りに番号を振る予定。
商品番号 テキスト型 このページの、一番上で見てもらった「商品テーブル」の[商品番号]とくっつけるつもり。
個数 数値型 要するに、この商品がいくつ売れたか入力する。

[伝票番号][行番号]を主キーにします。
どうやってふたつのフィールドをキーにするかというと・・・下の図で行くところの左端の青い丸印のところあたりを、そっと下方向にドラッグすると、2行選択できるんですよ。ちょっと挑戦してみてください。
で、2行黒くなったら、カギボタンをクリックして、2ついっぺんに主キーにします。

この意味は、[伝票番号]と[行番号]ふたつ合わせた状態で、ダブらなければオッケー、という意味です。
つまりですね?[伝票番号]が200番のレコードが3件あったとして、行番号がそれぞれ1,2,3ならオッケー、っていう意味ですよ。まあ、これは作りながら見ていきましょう。いちおう、チラッと頭に入れといてください。

で、こんな感じのテーブルになりました。
なんで[伝票番号]が数値型フィールドなのかは・・・おわかりですよね。「商品明細」テーブルの[伝票番号]が数値型だからです。

フィールドのデータ型は、同じ意味合いで使っているフィールドならきっちり合わせないといけません。
とても難しいことです。こういうことは、いろいろ作りながらゆっくり慣れていってください。

そうすると、はっきりいって、「売上明細テーブル」の方の[売上]フィールドはいらなくなっちゃうんですけど・・・。
紛らわしいから削除しちゃった方がいいですかねぇ。

でも、せっかくいっぱい入力したし・・・。削除するのは最後の最後でいいか。
このままにしておきましょう。でも、このテーブルの中の[売上]フィールドは、もう使わないので、その辺ごちゃごちゃにならないように頭の中整頓しておいてくださいよ。

では、まいりましょう。

下の図では、「売上」のフィールド、ない状態でお話してますけど、まああまり気になさらないで・・・。あ、なんか数値フィールドなのに左によってるし・・・あまり気にしないでください。図を作るときちょっとしくじったんだ・・・。図が間違ってますからね。[伝票番号]も[行番号]も数値フィールドですからね。

で、「売上明細」テーブルと、今作った「売上明細商品」テーブルがどういう関係になるかというと、下の図のように、[伝票番号]で結びつきます。「売上明細」テーブルのレコード1件に対し、「売上明細商品」テーブルの中には同じ伝票番号が1〜∞件存在するってことになります。


さて、このふたつのテーブルを、うまく組み合わせて、伝票入力をするためのフォームを作りたいと思います。そう、これがいわゆる「サブフォーム」というやつです。フォームふたつでひとつの仕事をこなす、二重構造のフォームです。ちょっと複雑な構造のフォームなんで、Accessのお役立ち機能を活用します。「リレーションシップ」というやつです。

ココに登録しておくと、この「ぼちぼち」データベース全体でのテーブルの結びつきに矛盾がないように、Accessがいろいろ配慮してくれるんです。ちゃんと「リレーションシップ」ってことを理解しておかないと、いろいろ難しいですけどね。チョコチョコお話ししていきますんで、ゆっくりやってみましょう。
メニューバー[ツール]→[リレーションシップ]を選びます。

なーんか、だだっぴろいウィンドウが出てきましたけど・・・。
ここに、「テーブルの表示」ウィンドウから、「売上明細」と「売上明細商品」テーブルを選んでやります。クエリーとおんなじ原理ですな。

で、「テーブルの表示」ウィンドウは閉じちゃってください。

で、このふたつをどのフィールドを基準に結びつけるか・・・ということを決めてやります。
これもクエリーと似てるかも。っていうかおんなじですね。

[伝票番号]どうし結び付けますんで、「売上明細」の方からぐーっとドラッグして、「売上明細商品」までくっつけてやってください。

と、こんな感じの画面が出てきます。
よーく観察してやってください。
「売上明細」テーブルのレコード1件に対し、「売上明細商品」テーブルの中には同じ伝票番号が1〜∞件存在するっていう構図を表してるんですけど、どうでしょう。

1対多の結びつき、ってやつですね。

こんなの理屈じゃないっすよ。
「売上明細」と「売上明細商品」テーブルの構造が理解できてれば、1対多なんて言葉は後から取ってつけたデータベース用語に過ぎませんからね。

よければ、[作成]ボタンをクリックして、オッケーです。
リレーションシップのだだっ広いウィンドウも、保存しながら閉じるとしましょう。


さあ、これで準備ができました。「リレーションシップ」の力を借りて、少々難解な構造の「サブフォーム」とやらに挑戦いたしましょう!(気合)