<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--基本操作を考える
データベース テーブル フォーム クエリー レポート マクロ&仕上げ
1 1 2 3 4 1 2 3 4 5 6 7 B 1 2 3 4 5 6  8 1 2 3 4 5 1 2 3 4 S



■クエリーを作る 5■

そしたら、もうひとつ、「さくら組だけ抽出するクエリー」で、表意形式のフォーム、作ってみましょうか。

と、こんな感じで・・・人数をCount関数で、売上合計をSum関数で、非連結のテキストボックスのコントロールソース欄で計算させるようにしました。
あとは、とりあえず「追加」はできなくてもいいかなと思い、フォームのプロパティの「追加の許可」だけ「いいえ」にしてみました。
その他書式とかテキストボックスの大きさとか、ちょこちょこ調節してみました。

さて・・・。これ、すごくよくリクエストがあるんですけど・・・。

「このフォーム上で、組名を指定して絞り込みたい」

って、これ、挑戦してみましょうか。

でも、はっきり言って、クエリーとフォームについて基本的なとこが理解できてないと、意味よくわかってもらえないんじゃないかなって思うんです。難しくはありませんが、いろんな設定や仕組みが組み合わさってひとつの動きを作ります。なので、どっか欠けてもうまくいかないものなんです。

でも、基本をつかんでしまえばいろいろ応用が利くと思います。ゆっくり解説していきますので、ゆっくり挑戦してみてください。


まず・・・このフォームの中に、テキストボックスをひとつ作りましょう。フォームヘッダー部分がいいでしょう。非連結の、ただのテキストボックスです。

で、このテキストボックスの名前を確認します。テキストボックスのプロパティの「その他:名前」というとこを見てください。
そうすると、多分最初は「テキスト17」とか、なんか適当な名前がついてると思います。このままでもいいんですけど・・・
なんか適当な名前に付け替えた方がわかりやすいんじゃないかと思うんです。
このフォームの中を見渡していただいて、まだ使ってない名前(社員番号、名前、所属、売上、くさや、っていうのはもうすでに使ってますもんね。
これ以外の名前・・・ってことです)をつけます。
わたしは「組名」にしました。
なんでもいいんですが、これすっごく重要です。

このフォーム、名前を付けて保存して、閉じてください。
わたしは「組で抽出」というフォーム名にしました。

このテキストボックスの中に入力された組名が、クエリーの抽出条件になるのです。

■ポイント■

★このフォームの名前

★抽出するための組名を入力するテキストボックスの名前...今回は 組名 としました。


次に、このフォームが基にしているクエリーをデザイン画面で開きます。

抽出条件を書き換えます。

forms![フォームの名前]![抽出するための組名を入力するテキストボックスの名前]

[ ]はつけなくても多分自動的につきますが、オブジェクト名であることを示す意味で、意識してつける癖つけといた方が何かと迷わずにすむかも。
formsにもカッコつきますけど、上の図のようになればオッケー。

forms・・・は、「フォームの中のテキストボックスなどの中の値を見ろ」という意味の、決まり文句です。
書き換えが終わったら、このまま上書き保存しながら閉じます。

■ポイント■

クエリーの抽出条件を forms![フォームの名前]![抽出するための組名を入力するテキストボックスの名前] にする。
このときのフォーム名とテキストボックス名が正しくないとダメ。特にカタカナや英文字などを使ってる場合、半角全角など要注意。

今回は、フォームの名前が 組で抽出 で、テキストボックスの名前が 組名 なので、

forms![組で抽出]![組名] と書きました。

カッコとかビックリマークは当然ですけど半角です。全角で入力するのは全角でつけたオブジェクト名のみ。
画面ではわかりにくいですから意識しながら入力する癖をつけちゃいましょう。


では、フォームのデザイン画面を開きましょう。

この次にお話することは、まだやってないことです。マクロもしくはVBAを使います。
どっちでもこの場合同じなんですが・・・。

マクロなら「再クエリー」、VBAなら「Requery」という動作を作ります。どっちも同じことです。
今回はVBAを書きます。っつってもそんな大げさなもんじゃないですからね。

上の図を見てください。さっき作った「組名」のテキストボックスのプロパティを見ます。
「イベント」という欄に「更新後処理」というのがあります。ここクリックしてください。右側に[...]っていうボタンが出てきますね。

「更新後処理」ですよ。「更新後処理」。似たのいっぱいあるんで間違えないでくださいね。

つまり、「このテキストボックスの中に何か入力されたあと、再クエリーっていう動作をしてください」というお願いをするのです。

なんで「再クエリー」なんかしなきゃいけないのか、ってことは・・・何度かそれとなくお話してきましたよね。
すごく感覚的なことなんで、とにかく、フォーム上で抽出条件が変わったら再クエリーするもんだって覚えてください。

[...]ボタンクリックすると、左のような画面が出てきます。
「コードビルダ」を選んでOKボタンをクリックしましょう。

さあ、なんかワケわかんない画面が出てきましたね。
VBAのコードを入力するための専用エディタなんですけど、まあ、Excelのと同じなんで「見たことあるぞ」って方もいらっしゃると思います。

細かいことは後回しにして、Private Sub 組名_AfterUpdate() って書いてあるとこを見てください。
多分、その行の下に、カーソルがピカピカしてると思います。
そこに、再クエリーしてくれ、とお願いを書きます。

Private Sub 組名_AfterUpdate()

DoCmd.Requery

End Sub

全部半角です。全角で入力しても役に立ちません。
入力を手伝ってくれる機能が働きますけど、まあ、とにかく上のようにDoCmd.Requeryと入力できればそれでオッケー。
これで「テキストボックスの中に入力した組名を使って、その都度抽出が実行されるフォーム」になります。

んじゃ、ちょっとわかりにくいですが・・・VisualBasicのウィンドウだけ閉じましょう。
んで、フォームの上書き保存をしておいてください。

■ポイント■

テキストボックスの更新後処理で再クエリーする。


ここまでオッケーですか?
上のどの操作が欠けても、正しい抽出フォームは完成しません。また、それぞれ必ず意味があります。
みなさんこうした抽出フォームは、いろんな形のをお作りになられるでしょう。でも、基本はコレ↑です。
これがばっちり理解できていれば、少々複雑なフォームでも十分作りこむことができるはずですよ。
特に「なんで再クエリーをするのか」、これがわかってるとわかってないとでは、大きな違いがあるもんです。
最初のうちに、とにかく習得しちゃいましょう。こんなの「慣れ」ですよ。

じゃ、いよいよテストです。どんな感じになりますかね。

まず、こんな感じで、最初はなんも表示されてません。ちょっとショックですけどコレはしょうがないですよね。

では、組名の欄に「さくら組」と入力して、Enterキーを押してください。
どうでしょう。出ます?Enterキーを押すって操作が、とりあえず「更新後」であることを表してますね。

「ゆり組」「すみれ組」など、他の組名も入力して試してみてください。
でも「うめ組」は・・・やっぱなんも出てこないですよね。ははは。ないからね。うめ組なんて。

その都度、その組の人数と売上合計が、フッター部分に出てきますよね。その辺も確認してください。
なかなか使えそうでしょう?


じゃ、こんなのも作れそうですか?
↓「売上金額が、フォームで指定した金額以上の人だけ表示する」ようなフォームです。
今まで作ったクエリーだと、かなり作り変えないといけなくなっちゃうと思うんで、なんか適当な名前のクエリーを新規作成してみてください。
どういうクエリーを作ればよいのか・・・まずはじっくり考えてから、挑戦してみてくださいね。

作る順番は、名前さえ間違ってなければクエリーから作ってもフォームから作ってもいいんですけど、一番効率のよい順番は

1)抽出条件なしの、ただのクエリーを作って名前を付けて保存しておく。

2)そのクエリーを元に、表形式のフォーム作って、ヘッダーのとこにテキストボックスを作って、名前を付けて保存しておく。

3)1)のクエリーのデザイン変更。抽出条件に・・・何を入力するんでしたっけ。

4)フォームのデザインを変更。テキストボックスの更新後処理イベントに・・・。

が、いいと思います。
あと、注意点としては・・・いくら以上ですから、抽出条件のとこ、一工夫しないといけないと思いますよ。イコールじゃないですからね。

「以上、ってどうやって指定すればいいの???」と、今よくわからない方も、とりあえずこのまま先に進んでください。
ここではとにかく、クエリを作る段取りと、クエリの役割をしっかり押さえてくださいね。