<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
 MS-Access2002チョ〜入門部屋>コンボボックスを使った絞込みのしくみ
   



テーブルを分ける−−−分けなくてもできるっちゃできる

余談も余談、オマケのお話です。
なぜ、テーブルを3つに分けたのか・・・ということについて、ちょっとだけホソクです。

別に、ひとつのテーブルでもできないことはないんですよ。やってみましょうか。
[KEN_ALL]を使って、試してみます。

[フィールド1]とかいう名前のままだとちょっとわかりにくいので、上のように名前を変えてみました。
あと、いらないフィールド(3桁のときの郵便番号とか)を消しました。

開くとこんな感じです。

つまり、このテーブルには、「全国の郵便番号分のデータ」がはいってるわけですよね。

なぜ、わざわざこのテーブルを3つに分けたのか?
分けなくても、今まで見てきていただいたようなコンボボックスによる絞込みは、可能です。
ではなぜ?コンボボックスに表示させるためだけに???

分けた理由は、ふたつあります。
ひとつは、わたしが普段そういう方法でこういうデータベースを作っているから。言うなれば好みの問題です。
もうひとつは・・・このテーブル、12万件入ってるわけです。
なので、コンボボックスに都道府県47行を表示するときでも、12万件のレコードが対象となってしまいます。

だから、テーブルを分けて作りました。。。

分けなくても、できますよ。同じようなこと。



こんなフォームがあったとします。

「コンボ2」に、都道府県の一覧を表示させます。
途中までは、今までの操作と同じです。「コンボ2」の値集合ソース欄をクリックして、右端のビルドボタンをクリックします。

テーブルを選んで、フィールドとして「都道府県名」を選びます。

「固有の値」だけ抜き出すようにすればよいですよね。


おなじみの関数を使って、[市区町村コード]から都道府県を識別する部分だけ抜き出します。
これ、やらなくてもいいんですけどね・・・都道府県名1列だけだと、たぶん「愛知県」が一番上に来ちゃいます。漢字コード順に並ぶと思うんで。それでもよければ・・・。


いちおう、並び順用に都道府県用のコードを作りましたけど、Format関数で作ったフィールドですから、インデックスは付けられないし、表示が非常に遅いんですよね。
なので、コンボボックスの「連結列」として使うのは、少々難儀です。
そこで・・・。「都道府県名」を1列目にして、こっちを使って次のコンボボックスにつなげます。



ふたつめのコンボの値集合ソースはこんな感じです↓

これも、何か並び替えの指定をしないと、漢字コード順になっちゃいますから、カナか、市区町村コードを選んで、並べ替えの指定をしておきましょう。


3つ目のコンボも同じように、値集合ソースを設定します。
こんな感じかな↓


コンボボックスから値を選びなおしたら、次のコンボの中身を再クエリしなくてはならないのも、基本的には同じです。
「更新後処理」イベントに、再クエリをするイベントを書いておきます。


さてーーー。
コンボを開こうとするとき・・・どうでしょう。そんなに遅くは感じないですか?

表示するデータは47行でも、結局のところ12万件のデータを相手にしています。
あまり、有効な方法とは言えないと思いますが、「コンボボックスのためにわざわざテーブルを作るのは、面倒だし、意味がないと思う」という人もいると思います。定期的によそからデータをインポートして来なくちゃならない場合は、いちいちテーブルを分けるなんて大変だし・・・というケースもありえますね。

でも、12万件のデータを使って47件のデータを出す、なんて、ちょっとなーと思いますよ。
件数がものすごく多いときや、内容の更新がほとんど行われないデータの場合は、テーブルを分けてコンボボックス用に完備するほうがよいと、わたしは思います。
「多い」っていうのも、人によってそれぞれですけどね・・・。皆さんは、何件くらいのレコード件数を「多い」って思います?

さてー。
いろいろと見ていただきましたけれども、お仕事のお役に立ちそうでしょうか・・・。
いまや、「大量のデータを順々に絞り込んで検索」って、珍しい手法ではないと思うんですよね。
基本さえ掴んでしまえば、応用が利くと思いますんで、ぜひとも活用してみてください。

で、こういった「2段階3段階の絞込み」のお話をすると、「エクスプローラ風の画面は作れないの?」ってお尋ねになる方も、いらっしゃいます。
こういう感じの画面のことかな・・・↓

マウスでクリックしていくと、順番に細かい階層のデータへと展開していく・・・。
こういう画面、よく見かけますよね。MS-Accessでも、やろうと思えばできないことはないんですけどね。。。
今回お話したような、テーブルのの構造とか、コンボボックスの連なりとかが理解できていれば、いけるかもしれないですね。
でも、めっちゃくちゃ難しいし、めんどくさいです。これ。

っていうか、データベース(テーブルやクエリの中のデータ)を扱うためのものではないので、あまりにも件数が多いとレスポンスは悪いし、作りこむにしてもかなり工夫してめんどくさいことをやらないとならない・・・。そうとう大変です。
あんまりオススメではないですけれど、やろうと思えばできないことはないです。

これは、また別の機会にお話します・・・。いわゆる、Visual Basic for Applicationを使って作りこみしますし、あまりわかりやすい資料とかは存在してないもんだと思っといたほうがいいですね・・・。
わたしゃーすっげー苦労しました。これ。できればやらないほうが無難かも・・・。