<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>MS-Accessを使いこなすために・・
  (←別ウィンドウでサブメニュー)



5.そのクエリを基にしたフォーム

このクエリ、この後も何度かデザインビューをご覧いただくことになるかと思いますので、クエリ名、しばらくの間記憶にとどめておいてくださいよ。そんなわけで、このクエリを基にして、フォームを作りましょう。
「オートフォーム単票形式」で作ったフォームをいろいろと手直しすればよいと思います。

適当なフォームができると思うので・・・基にしているのはテーブルではなくてクエリですけれど、フォームのプロパティとかデザイン変更の操作は同じです。お好みでデザインを整えてみてください。

で、適当な名前を付けて保存しましょう。
なんでもいいっすよ。わたしは「労働時間入力」っていう名前にしてみました。
え?タイトルのところが「Q_労働時間入力」になっちゃってるって???
それ、確か「フォームのプロパティ」のどっかになかったでしたっけ???標題、とか・・・。



名前をつけえて保存できたら、このフォームから社員の情報を入力する際、社員番号を入力すれば名前は自動的に出てくるはずです。ちょっと入力してみましょうか。フォーム下部分の「新規入力」ボタンをクリックしましょう。



「社員番号」「労働日」は必須入力ですよ。主キーにしてますからね。
っていうかこのふたつを入力し忘れちゃうと、何日のことなのか後でわけがわかんなくなっちゃいますから・・・。



基本的に、さっきクエリのデータシートビューの状態のときに1番下の行に入力したのと、同じことです。ただ単に、あの1行分が、このフォームに表示されているだけのことです。左側にエンピツマークも出ますよね。コレが出ている間にEscキーを押せば、この入力は取り消しになりますしね。
で、この後、Enterキーを押し続けると・・・。
入力したものが消えちゃった!!!???ってな具合に・・・なるんでしたよね。
これはー・・・消えたわけじゃないんですけれど、なんか、フォームのプロパティで、調節するところ、ありましたよね。
なんでしたっけ?
ほらほら、思い出して。ほら。

うーん、忘れちゃった・・・というかたは、まあ今日はこのままでもいいですよ。ふふふ。
そのほか、「基本をマスターする」でお話したプロパティで、使えそうなやつがあったら設定してみてください。
何事も練習です。まあ、変なになっちゃったらやめちゃって作り直せばいいじゃありませんか。
とにかくいろいろいじってみてください。



さて、もう一度、このフォームが基にしているクエリのデザインを思い出してみてください。

こういうクエリを作るときの、「どのテーブルとどのテーブルを結びつけるのはこのフィールドだ」みたいな、テーブル同士の結びつきに関する一連の考え方というか構造というか、そういうのをリレーションシップって言います。
あるいは単にリレーションと呼ぶこともありますね。
つまり、テーブル同士の関係(リレーション)を明確にすること、です。
なんか機能とかソフトの名前とかじゃないのでとてもつかみにくいんですけれども・・・。
それに、「やらなくちゃいけないこと」っていうわけじゃなくて、基本的には皆さんの頭の中でテーブル同士のつながりあいができてればそれでいいんですよ。
リレーションなんて言っちゃうと、データベースのすごく難しい技術のお話なのかと思い込んじゃって近寄りがたくなっちゃいますが、別に特別なことではなくて、よく考えてみれば業務的には当たり前のことばかりなんです。

会社の中で、部門ごとに担当が分かれてるのと同じような感じです。きちんと分かれてればお互い仕事しやすいですが、分け方がおかしいと効率が悪い。営業部で担当するお客様ごとにグループを分けて活動している場合に「流通系」「生産系」「公共」と分けるのと「会社名があ行のお客様」「か行のお客様」・・・と分けて活動するのと、どっちが仕事しやすそうでしょうか。
多分、グループの分け方で、仕事のしやすさって変わってくると思うんです。会社によって違いますよね。きっと。
テーブルの設計も同じようなもんですから、どういうデータベースをどういうふうに使っていくのかによって、テーブルの設計も変わってきます。

リレーションという考え方はコンピュータの技術や知識の面から生まれたものではないので、そこんとこを見失ってしまわないようにしてくださいね。たまに、技術や知識に溺れて、使いにくいデータベースばかり作っちゃってる人に出会うこともあります。これはかなり悲しいです。
テーブルの作り方、リレーションシップのとり方に「正解」はありません。
強いて言えば「皆さんの会社の業務を最も効率よく進める」ことが正解ですね。

だから、データベースは難しいのです。決してソフトの操作方法が難しいわけではありませんのです。
特にこの「リレーション」っていう考え方は、表計算ソフトで1枚のワークシートを作ることに慣れてる人には難関だと思います(あと、Vlookup関数とかいっぱい使ってる人とか)。でも、「わざわざテーブルを分ける」のではなくて、「そのほうが効率よくデータ管理ができるから、分ける」のだということ、忘れないようにしてくださいね。

そんな感じで、テーブル同士の結びつきなんてものは、私たちが承知してればいいことなんですが・・・たまに、MS-Accessにもテーブル同士の結びつきを承知しておいてもらわないとならない場合が・・・・あるんです。
そういうケースをこれからお話しようと思うんですよ。ええ。
MS-Accessにはウィザードっていう機能がありますよね。いろんなシチュエーションで登場する機能なんですが、フォームを作るときも「フォームウィザード」っていうのが、あります。いろいろ条件を言ってやると適当なフォームを作ってくれるという便利機能です。うーんほんとうに便利かどうかはよくわかんないですが・・・。
あれをうまいこと活用して「サブフォーム」とか「サブレポート」とかいうものを作るとき、のお話です。
サブフォームってご存知ですか?
簡単に言っちゃうと、フォームの中にフォームを埋め込んでいるフォームっていう感じです。ほほほ。

こういうフォームとかレポートが必要になるときってけっこうあると思うんですよね。
見積書とか売上伝票とかでもそうだと思うんですけどね。1枚の見積書に、いろんな商品の金額書いたりしますよね。

でもそれは別にぐちゃぐちゃに書いてるわけじゃなくて、「ゴミ袋100枚とボールペン3本と煮込みうどん7つでいくらくらいになるか見積もってください」ってお客さんから言われたら、1枚の見積書に3つの商品を並べて書くんですよね。
3つの商品は、その見積伝票にぶら下がる情報なわけです。



また、絶対3つとは限らないですよね。150種類くらいの商品まとめて言われることもあるかもしれないし、見積りが必要な商品は1種類かもしれません。「見積りを依頼するときはかならずきっかり3品にしてください」なんて、こちらから言えるわけもないし、1枚の見積伝票に対して見積る商品の種類は1〜ムゲンダイ。
こういう構造のフォームを、サブフォームと言います。社員ひとりの情報を表示するフォームの中に、その社員の今までの労働状況が表示される表形式のフォームが埋め込まれたようなデザインのフォームです。「見積書」という1枚の紙の中に2つの要素が含まれてるって感じですね。

     左側の見積書のグレーのところが、ひとつめの要素で、右側の見積書のグレーのところがふたつ目の要素。

そして、このサブフォームという形式のフォームを支えているのもまた、ふたつのテーブルを結びつける「リレーション」という考え方です。

サブフォームとは一枚の紙の中に2種類(あるいはそれ以上)の情報を持つわけで、この見積書の例で言えば、左と右それぞれグレーで塗りつぶしたところを、別々のテーブルに持つことになるわけです。
フォーム自体は単なる「テーブルの内容を表示する枠」にすぎないので、大切なのはふたつのテーブルのデザインと結びつき部分が大切になります。



テーブルの構造としては、↑コンナカンジになるかな・・・。
で、このふたつのテーブルの中のデータを、きちんと結びつけるために「見積番号」といったフィールドを両方に設けます。

「見積番号」の同じレコードをかき集めれば、それで1枚の見積伝票になるわけですね。
で、あとは、「商品をコード化して商品マスターテーブルを別に作ろうか」とか「顧客をコード化して顧客マスターテーブルを作っとけば住所とか電話番号とか扱いやすいかな」とか、いろいろ考えていきます。こういう作業を「テーブルの正規化」といい、この作業によって生まれたテーブル同士の関係を「リレーション」といいます。

こういう感じのフォームが必要になるときってけっこうあると思うんですけど、皆さんの周りではどうでしょうか?
思惑通りのサブフォームを作成するのはとても難しいです。といってもフォーム作りというよりも、レコードソースとなっているテーブル同士の結びつきの部分ですね。フォームとテーブルの関係もしっかり理解できてないとならないし、テーブル同士の結びつきとか、主キーの意味とかも理解していないと、なかなか難しいかもしれません。