<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97超入門>基本をマスターしよう
 DBTable1Table2Fom1Form2Form3Query1Query2Query3Query4Query5Query6Report1Report2Report3Macro



■Query5 : 番外編--データの絞込み

うーん、じゃ、このフォーム使って、チョットばかし実戦向きの仕組みを作ってみましょうか。
お時間があるようでしたら挑戦してみてください。

[学部]を指定すると、その学部の学生だけの表示に絞り込む、というやつです。
なんかの役に立つと思いますよ。

まず、フォームを整えますか。[学部]はいらないかなーと思って、とっぱらっちゃいました。
あと、フォームヘッダーのところ、ちょっと間をあけて、スペースを作りました。
あと、フォームフッターってところも、少し広げました。マウスでドラッグすれば広がりますから、調節してみてください。


で、フォームヘッダー部分に、コンボボックスというのを作ります。
これ、なかなか便利なんで、活用してみようと思うわけです。

ツールボックスの中に、「コンボボックス」を作るボタンがあります。
これをクリックしてから、ヘッダー部分の適当なところをクリックするかドラッグしてみてください。
コンボボックスといわれるものが出来上がります。

で、大きさや位置、ラベルなどを調節しましょう。この辺はお任せします。

大きさや位置が落ち着いたら、このコンボボックスに名前を付けましょう。
名前は、コンボxxと適当なのがついてますけど、これじゃ愛着が湧かないですよねぇ。
ちゃんと名前を付けてあげましょう。
あ、意味がないと思ってるでしょう。言霊のチカラを甘くみてはいけませんよ。

このコンボボックスのプロパティを出します。
で、その他のところの「名前」という欄に、何かわかりやすそうな名前を入力してあげましょう。

ん、わたしは[学部指定]という名前にしました。今日からおまえは[学部指定]だ。

で、メインイベントです。
「データ」プロパティをみますと、値集合タイプと値集合ソースというのがありますよね。
このふたつが、このコンボボックスの中になにを表示するのか、という大切な事柄を左右するプロパティなんです。

値集合タイプがテーブル/クエリーの場合

テーブルかクエリーの中のレコードを表示します。
値集合ソースのところに、データベース内のテーブルとクエリーの名前がずらーっと出てきます。

値集合タイプが値リストの場合

値をここで指定できます。
ぶた;たぬき;きつね;アリクイ;いもむし;かえる
といった具合に、半角のセミコロンで区切って、表示したい値を値集合ソース欄に入力します。

ま、とにかくやってみましょうか。


値集合タイプはテーブル/クエリーのままでオッケーです。
で、値集合ソースの方をクリックします。と、おなじみのリストボタンとビルドボタンが出てきますよね。
クリックしないと出てこないですよ。

まず、リストボタンをクリックして、テーブルとクエリーの一覧を出します。
で、[名簿テーブル]を選びましょう。ここから学部の一覧を拾います。
なんでって・・・なに学部となに学部があるか、このテーブルじゃないとわかんないんですもん。
[学部テーブル]みたいなテーブルがあればそれ使いますけどね。

で、このビルドボタンをクリックすると・・・あれ、なんか見たことあるような画面になりましたねぇ。
クエリーのデザイン画面とおんなじような画面ですね。

クエリーを作るわけじゃないんですけど、まあ、似たような操作をします。
[名簿テーブル]の中身全部表示してもしょうがないですからね。[学部]フィールドだけ選びます。

でも・・・このままだと、今、15人分の入力があるんで、商学部とか理工学部とか、何回も何回も出てきちゃいますよね。多分。
そこで、クエリーのプロパティをいじります。クエリーにもありますよー。プロパティ。
どっかグレーのとこダブルクリックすると出てくると思います。

この中の、「固有の値」っていうところを「はい」にしてください。
これで、商学部の人が5人いても、このコンボボックスの中に「商学部」というリスト1回だけしか出てこない、ってことになります。

・・・なにをわけのわかんないこと言ってるんだって顔、してません?
んじゃー、ちょっと確かめてみます?

↓このツールボタン、もうおなじみですよね。データシートビューへの切り替えです。

さて、[名簿テーブル]には15件のレコードがあるんですが、開いてみると出てくるのは4件だけ。
さっきの「固有の値」という設定がきいてるんです。
どう違うのか、「固有の値」を「いいえ」にした場合と、見比べてみてくださいね。

この機能、わざわざコンボボックス用のクエリー作ったりするの、めんどうだなーという場合や、これからなに学部の学生が入力されるかわかんない場合などに便利です。

でも、今は15件だけだからいいですけど、これが2万人の学生の入力が[名簿テーブル]にあった場合などは、ちょっともたついちゃうかもしれないですね。
なんかあらかじめ[学部テーブル]みたいなのを用意するよう、仕組みを考えた方がいいでしょう。

あんまりレコード件数とか、気にしない方がいいんですけどね。とりあえずこんな方法もあるよ、ということで。
これもクエリーの活用方法のひとつと思ってください。


確認できたら、このウィンドウを閉じましょう。デザインビューに戻らなくても、正しく学部が出ることがわかればこのまま閉じてしまって結構です。
あ、このウィンドウで[保存]ボタン(フロッピーディスクのツールボタン)は使いません。
こういうクエリーをひとつ作る操作になりますんで・・・今回は値集合ソース欄だけ正しく記述できればよいので、クエリーとして保存しないで閉じます。

と、なんかものものしいメッセージが出てきますけど、びっくりしないで下さいね。なんかエラーかと思っちゃいますよねぇ。これじゃ。

まあ要するに、値集合ソース欄が書き換わったですけど、書き換えちゃっていいんですか?という意味みたいですね。
いいので、[はい]の方をクリックしましょう。


おおおー!できたー!!

・・・でも、コンボボックスの中身、変更しても何にも変らないよ・・・。

あたりまえでしょう。まだそういう仕組み、何にも作ってないじゃないですか。
コンボボックス作っただけで「経済学部を選んだら経済学部の学生だけの表示になる」んだったら、あたしゃあおまんまの食い上げですよ。
まだまだこれからですって。がんばりましょう。

とにかく、コンボボックスの中身が正しく出ることがわかったら、フォームは保存していったん閉じましょう。


[成績クエリー](あたしはそういう名前にしましたけど・・・)の内容を書き換えます。

そう、もうお分かりですよね。あのコンボボックスの中身と同じ学部のレコードだけ抽出するように指定します。

あたしは、フォームの名前が[成績一覧フォーム]で、コンボボックスの名前が[学部指定]ですので、

Forms![成績一覧フォーム]![学部指定]

となりました。ひらがな漢字以外はすべて半角です。formsの大文字小文字はどちらでもOKです。

んではこのクエリーを保存していったん閉じ、成績一覧フォームを開いてみましょう。


お???今度はどうかな・・・・。

んー・・・なんか、何にも起こらないんですけど・・・。

前に、「学籍番号入力してその学生のレコードを表示させるしくみ」作りましたよね。
オレンジ色の画面のやつ。あそこでちょっとお話したこと、もういちど思い出してください。

DoCmd.Requery・・・って、どっかに入力しましたよね。
あれ、やらないと、やっぱり、コンボボックスからなんか別の学部選んでも、フォームは開いたときのレコードソースの状態を表示してて止まっちゃってるんですね。


もうひとふんばりです。がんばりましょう。
ええと、デザイン画面に切り替えて、コンボボックスのプロパティを出します。

で、「更新後の処理」というところをクリックしましょう。
右端にビルドボタンが出てくるはずなので、これをクリックして、コードビルダという機能を使います。

「マクロビルダ」でもいいんですけど・・・
後でマクロをマスターしたら、マクロの中に「再クエリー」っていうのがあります。
Requeryと同じ意味の動作なので、マクロを利用してもいいですね。

でも、今日はコードを書きましょう。1行だけですからね。

で、学部指定のアフターアップデートというあんちょこプログラム名が出てきます。
ここに学部指定コンボボックスの内容を変えたら、つまり別の学部を選んだらなにをするかを書き込みます。

DoCmd.Requeryです。