<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97超入門>絞込みの仕組みを作る
 基本のクエリー サブフォームで 表形式のフォームで コンボボックスで 全件表示 コンボボックスが片方空っぽでも 2段階の絞り込み



■サブフォームで

前のページの[基本のクエリ]のところは、OKですか?
このクエリの作り方、動き、仕組みが理解できれば、「絞込みの仕組み」なんてへのかっぱですよ。

じゃ、次に、例えば、こんな感じの表形式のフォームにしてみましょうか。

[クエリー]を基にして下のような表形式のフォームを作ります。

名前は・・・[サブフォーム]とでもつけますか。

このとき、できれば[フォーム]は開いたままの状態にしておいてください。
これが開いてないと[クエリー]を開くとき少々つまずくっことは、前のページでお話した通りです。
これ開いていた方が、オートフォームとか使ってフォーム作りやすいんです。

[フォーム]が開いてないと、[クエリー]を開こうとする度にこんな画面が出てきます。

これは別にエラーでもなんでもなくて、「[クエリー]を開くために必要な情報をちょうだい!」って言ってるわけですよね。
よく見ると、[クエリー]の中に入力した抽出条件ですよね。これって。
[サブフォーム][クエリー]を基にしてますから、[サブフォーム]を開こうとする度に、こういう画面が出てきちゃうんですね。
だから、[フォーム]は開いたままの状態の方が、この場合はテストしやすいってわけです。


でも、ふたつのフォームをバラバラに使うのもなんだなーということで、[サブフォーム][フォーム]に埋め込んじゃおうと思います。
これがいわゆる「サブフォーム」ってやつですね(笑)。

下のように、データベースウィンドウと[フォーム]をうまく並べて表示されるようにします。
で、[サブフォーム]のアイコンをびよーんとドラッグして[フォーム]の開いてるところにでもぽとっと落とします。

一時的にフォームがびよーんと横に広がっちゃいますけども、落ち着いて形を整えてください。
画面のスペースには限りがありますので作業しにくいですけど、これも慣れです。
フォームの境界線もめちゃめちゃ右の方にいっちゃいますんで、きちんと元に戻しましょう。

で、いちおう確認を・・・。「サブフォーム」という名前の、白い大きな枠が一つできることになります。
この中に、[サブフォーム]がすっぽり埋め込まれたことになるんですね。
別々の独立したフォームではありますが、[フォーム]ひらくと、いっしょに[サブフォーム]も開いて出てくるって感じ。
今回みたいな状況におあつらえ向きの状態になるわけです。

この四角枠の名前、多分埋め込んだフォームと同じ「サブフォーム」って名前になってると思います。ここんとこちょっと押さえておいてください。

オッケーでしょうか。


サブフォームの細かい操作方法は、別のページでご紹介してますんで、
まあとりあえず完成品はこんな感じになりましたってことで・・・。

で、種類とランクを入力して・・・あれ・・・???

なんもでないっすねぇ。なんで???

これもいろんなところでお話してるんで、既にご承知の方も多いと思いますが、フォームというのは、開いたときのレコードの状態を表示するものなんですね。
開いたとき、[種類]も[ランク]も何も入力されてなかったんで、当然[クエリー]の抽出結果はゼロ件。

再クエリーってのをどっかのタイミングでやんないと、「やさい」「B」っていう新しい抽出条件での抽出結果をフォームに表示してくれないんです。
もう一度フォームを開きなおしてもいいんですけど、まあ、こういう場合は再クエリーってのが一番いいんじゃないでしょうかね。

で、いつ再クエリーするか、ってことなんですけども・・・。これも別に決まったやり方はないんですよ。

そうですねぇ。[ランク]のテキストボックスの入力が完了した後、ってのはどうでしょう。やってみますか。

このテキストボックスの「更新後処理イベント」で、再クエリーするマクロが動くようにします。


この段取りはもうみなさんオッケーかな・・・・。でも一応書いちゃいますね。
[ランク]のテキストボックスのプロパティを出します。イベントのとこです。

で、「更新後処理」というのを見つけて、クリックします。右側にピリオド三つのビルドボタンが出てきますね。これをクリックします。

で、「マクロビルダ」を使います。

なんか適当に名前をつけましょう。適当でいいですけど、なんて名前にしたかわかんなくなっちゃうってのはなしですよ。
ちゃんと、どこでどういうふうに動かすマクロなのか、しばらくの間記憶しておいてくださいね。

マクロの中に含めるアクションはとりあえずひとつだけ。再クエリーです。

で、今回は、サブフォームの中身を再クエリーしてほしいんで、
コントロール名というところに「サブフォーム」と入力します。

ちょっとややっこしいお話をしますが・・・。
ここに入力するのはサブフォーム名ではありません
[フォーム]から見たときの、埋め込みサブフォームの場所の名前
白い大きい四角枠の名前です。

このマクロは保存しながら閉じ、フォームの作業に戻りましょう。


で、今度はどうでしょう。種類とランクを入力して、ランク入力後Enterキーを押すと・・・。
絞り込まれた結果がサブフォームに出てきません?

種類とランクを書き換えて、何度か試してみてくださいね。

いちおうこれで一段落。いかがでしょう。
いろんな仕組みを組み合わせての操作になりますけど、テーブル、クエリー、フォーム、マクロのつながりが理解できれば、いろいろ応用できそうですよね。

基本はこれなんですけど、ここまで形になると・・・。
「種類やランクを、一覧から選べるようにしたい」とか、
「何にも指定しないときは全部の商品が表示されるようにしたい」とか、
いろいろ盛り込みたい機能が具体的に浮かんできますよね。

何にしてもクエリーですね。
このオブジェクトでどんなことができるのか押さえておけば、いろんな検索の仕組みを作ることができると思います。


オマケですが、上の図を見ると、サブフォームの中、常に一番下が「空白行」です。
これは、このフォームを通じて商品マスターに新しいレコードを追加入力できますよ、という印でしたよね。
これ、いらないな、追加の入力はしないな、というときは、[サブフォーム]のプロパティをいじりましょう。

データプロパティの中に、「追加の許可」というのがあります。これをいいえにすると、この[サブフォーム]を通じて新規入力ができなくなります。
別に商品マスターテーブルに追加できなくなるわけじゃないので、その辺フォームとテーブルの役割を区別して考えてください。

ついでに「削除の許可」とか「更新の許可」なんてプロパティをいじると、削除もデータの書き換えもできなくなります。
詳しいことはヘルプをご覧いただくとして、この辺もケースバイケースで活用してみてください。

サブフォームっていうの、ちょっと手間ですかね・・。
これは一例なんで、じゃ、サブフォームじゃない方法、ちょっと試してみましょうか。今日おありでしたら、次のページへGO!