<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97超入門>サブレポートとサブレポート
 サブフォーム     サブレポート 



■サブフォームを作る#3

ほう、どうやらちっとはマシなフォームになったみたいですね。
じゃ、なんか入力してみましょうか。

なにを入力すればいいかって?なんでもいいですよ。くつしたでもちくわでもなんでも注文してください。
こういうテストデータを即興で考えるのも、システム作りの大切な仕事ですよ。

おや???
注文番号を入力したら、サブフォームの方の注文番号欄にも番号が入りましたね。

これぞリレーションシップのなせる技。
まあ、気にせずとりあえず[注文日]と[お客さん名][メモ]を入力してください。

メモ欄は、メモ型のフィールドにしているなら、64kbまで文字入力ができます。
テキストボックスの中にスクロールバーが出てきます。
なんか長い文章入力してみてください。

多分、中で改行もできると思います。



サブフォームの方の[注文番号]は入力する必要はありません。
[明細行]に1と入力して、なんかしなものを入力しましょう。

なんでもいいですって。ダイナマイトでもヌンチャクでも。

ふたつめの商品を入力するときは、[明細行]に2と入力してください。

え、なぜかって?
そりゃ、[明細でーす]テーブルって、主キーはなんでしたっけ?
主キーたるもの、空欄でもダブってもいけないんですよね。


さて、このフォーム、もう一度じっくり見てみましょう。

オレンジ色で囲んだ部分は、メインフォームとサブフォームを結びつけるためのフィールドです。
ここが同じということは、同じデータ群として結びつくことができるわけです。

紫色の部分は、サブフォーム側のテーブルでいうところの主キー。
このふたつを組み合わせた状態でダブらなければ、横一列にぴしっと整列できるわけですね。

まあ、主キーに関しては、理解できなくて、何のために設定するのか意味が分からなくても別段問題はないと思いますよ。
ですが、サブフォームを作るのであれば、とにかく双方のテーブルに主キーを付けるべきだと、そう無理矢理考えてください。
主キーを設置することの意味が理解できなくても、とりあえずそれでよいと思います。


で、画面下部分の「レコード移動ボタン」の「新規入力」ボタンをクリックすれば、メインフォームでいうところの「次の入力」ができるわけです。
どんどん注文を取りましょう。

どうです?なんとなくわかってきました?
ここまで作ってきて、なにをやっているのかぜんぜんわからない・・・となると、ちょっと厳しいものがあるかもしれません。
Accessは図画工作ですから、手元で作っているものがどういうものなのか見失ってしまうと、訳が分からなくなっちゃいますもんね。
このフォームを使って、本当に何か注文しているような気持ちになって、何件か入力してみてください。


さて、何件か入力ができたら、とりあえずフォームは閉じて、[注文でーす]と[明細でーす]を開いてみましょうか。

ふたつのテーブルを見比べてみてください。
ほんとにこれで正しく注文が取れてるのか、いささか疑わしい感じもしますけど。。。
よーくみると、[注文番号]を頼りに、ふたつのテーブルの中のデータが結びつくことがわかりますよね。

あっ、なにをわけのわかんないこと言ってるんだって顔してますね。。。
とにかく、きみどり色で囲んだ部分、じっくり見比べてみてください。

なんで[明細でーす]の方にも[注文番号]なんてフィールドが必要なんだ????

って思っちゃう方もいらっしゃると思うんですけどね。
これがリレーショナルデータベースの本質なんです。

このどうさを、テーブルを分けずにひとつのテーブルでやろうとすると、ずいぶん無駄なデータが発生すると思いません?
注文テーブルの方に、商品と個数のフィールドを持てば、別に[明細でーす]なんてテーブルを別に設ける必要ないですけど・・・。
お客さん名とか注文日とかのフィールドはどういう扱いにします?

なぜ、テーブルをふたつに分けるのか、一対多のむすびつきってなんなのか、なぜ両方のテーブルに[注文番号]が必要なのか、なんで主キーを設けるべきなのか・・・。このふたつのテーブルをじっくり見比べて、何度かフォームから注文入力を繰り返してみてください。

リレーションシップとは、機能ではありません。データの見方、考え方を養うことです。
あたしがお手伝いできることは残念ながらここまで。後はみなさんなりの答えを出してみてください。


余談ですが、上記のように、[明細でーす]のテーブルの方にちゃんと注文番号が入ることがわかったら、サブフォーム側に[注文番号]のテキストボックスはない方がよさそうですね。

Access97をお使いの方は、テキストボックスを削除してしまっても、ちゃんとメイン/サブフォームは[注文番号]で連動します。
Access95や2.0の方は、もしかしたらこれを削除しちゃうと、メイン/サブの関係が絶たれてしまうかもしれません。
わたしの記憶がちょっとあいまいなんですが・・・。

Access95、2.0、1.1の方は、注文番号のテキストボックスの幅をうーんと縮めてぺったんこにして見えなくするとか、そういった方法で入力の邪魔にならないように工夫してください。

どんどん入力してみましょうね。使ってみてはじめて「こんな風にできないかな」と、いろいろアイディアが浮かんでくると思います。

いろいろありますよねえ。[注文番号]を自動的にふることはできないかとか、[注文日]に必ず今日の日付が入ってるようにできないかとか、[明細行]をいちいち入力するの大変なので自動的に12345・・・とふれないかとか、しなものやお客さん名を一覧から選ぶようにできないかとか、個数に単価をかけて金額を出して、集計できないかとか・・・。

何回か入力してると、細かいカーソルの動きなんかもいろいろ気になってくると思います。

いろいろ考えてみましょう。でも、今日はここまで。ちょっとずつ煮詰めていきましょう。