<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



■クエリーを作る 7■

さて・・・。そしたら次に、

★「組名」を入れてないときは、全部のデータを表示させたい。

これやってみましょうかね。
・・・なんでこんなことを考えなきゃならないのか、まず整頓してみましょうか。

フォーム、一回閉じて、もう一回開いてみてください。
と、なーんも出てこんですよね。なーんも。なんも出ません。なんで????

わたしたち人間の感覚で行くと、「何も条件を指定しないってことは、全部のデータを出してもらいたいんだけど」って感じになりがちですが、コンピュータからすると「組名がからっぽのレコードを抽出いたします」ってことになるわけです。
んなレコードは一件もありません。したがって、なんも出らんのです。

まず、この気の利かない石頭と、まっすぐ向き合っていかなければなりません。どんなに頭に来ても、こいつはこういうことしかできないんです。
じゃ、人間さまの方がいろいろ気を使って、「組名の欄が何にも入ってないときは、全部のレコードを出してもらいたいんだよ」って教えておいてやらなければならないのです。

じゃ、今のクエリーの状態で、「全部の組の人を出す」って、どうやれば・・・。なんか、すっごく難しそうな気がしません?

じゃ、ちょっとこのフォームが基にしているクエリーを見て、考えてみましょうか。
フォームを閉じて、クエリーのデザイン画面を見てみましょう。

あ、あ!!!!!

・・す、スイマセン。取り乱してしまいました。今、ダブルクリックしようとしませんでした???
あ、取り越し苦労でしたか・・・だったらいいんですが・・・。
このクエリー、単独で開こうと思っても、そうはいかないですから、扱いにはちょっと注意が必要なんです。
このままこのクエリをダブルクリックすると、普通はクエリを開くっていう動作になって、データシートビューが開いてきますよね。
で、テーブルの中から指定されたレコードだけが絞り込まれて表示されるはずです。

でも・・・。このクエリを開こうとすると、なんか変な画面出てきません?ためしにダブルクリックしてみてください。
左上の「開く」ボタンでもよいです。

これ、別に壊れちゃったわけでも何でもないですよ。慌てないでじっくり考えてくださいね。
よく見ると、Forms![組で抽出]![組名]って出てますよね。
つまり・・・今、「組で抽出」っていうフォームが開いてないから、[組名]っていうテキストボックスの中の値が見当たらないですよね。
なので、「これってなんじゃ?」と、クエリーが聞いてきてるんです。
なぜって、これ、このクエリーの抽出条件になってますよね。

フォームが開いていればこんな画面出ないんですけどね。


話が横道にそれちゃいましたね。ごめんなさい。んでは改めて、クエリーデザイン画面を出してみましょう。

考えを整理してみると・・・。
「コンボボックスの中身が空っぽのときは、抽出条件をなくしたい」って感じになりますよね。できないことはないと思いますけど、なんか難しそうな気がしません?
実際、難しいんです。ほんとに。

なので・・・。いっそのこと、クエリーをふたつ用意して、使い分けるって感じにしてみません?操作もわかりやすくなると思うんです。
つまり、今のこのクエリーと、全く同じデザインで抽出条件だけが空っぽのクエリーと、ふたつ作っておいて、状況によって分けて使うって方法です。
まあ、わりと使える方法だと思いますんで、挑戦してみましょうよ。


上のクエリーとおんなじデザインで、抽出条件だけなくしたクエリー・・新規作成してもいいんですけど、めんどくさいっすよね。コピーして使いません?
じゃ、そういうことで、このクエリーは閉じて、データベースウィンドウの中を見ましょう。

ふつうにファイルコピーするみたいにコピーすればいいんですよ。例えば、クエリー名のとこを右クリックするとショートカットメニューが出てきますよね。

このなかから「コピー」って選んで、次にこのウィンドウの中の白いとこどっかを右クリックして「貼り付け」って選ぶと・・・。

下みたいなボックスが出ますよね。コピーしたオブジェクトの方に、なんか名前を付けてね、って感じでしょうか。
なんか適当に入力すれば、はいオッケー。

あ、でもこのままじゃ、抽出条件入ったまんまですよね。
コピーした方をデザイン画面で開いて、抽出条件空っぽにして保存しなおしてください。

えと、わたしの場合は、
 ★全部のレコード表示させたいとき使うクエリ
 ★コンボの値で絞り込みさせるときのクエリ
って感じになりました。

クエリの数増えてきて、ごちゃごちゃになってしまってません?
一息ついて、どのクエリがどういう抽出をするためのクエリだったか、見直しておいてくださいね。


さあ・・・。また、ちょっとややこしい操作になりますよ。ゆっくりやりましょう。
まずは、どういうタイミングで「全部表示するか」ってことを考えます。どうしましょうかねぇ・・・。
いろいろね、タイミングとか、難しいんですよ。使い勝手が悪くなっちゃいけませんもんね。

じゃあ、ひとつわたしからの提案です。

コンボボックスの右側にでも、コマンドボタンをひとつ作っておいて、そのボタンをクリックしたら全部のデータを表示し、コンボボックスから何か選んだら、絞込みをするっていう感じにしましょうか。

では、フォームをデザイン画面の状態で開いてください。

ツールボックスの中に、「コマンドボタン」というのがあります。似たやつがあるんで、気をつけてくださいね。
「コマンドボタン」ですよ。
で、これクリックした後、コンボボックスの右側辺りをクリックしてください。
ドラッグするんじゃなかったですよね。テキストボックスやラベルを作るときと同じ要領です。

ボタンの大きさとかは、調節してください。おまかせします。
ただ、コマンドボタンに限っては、残念ながら色を変えることができないんです。
色は、グレーというか、ウィンドウの基本色のまま。これはWindowsの仕様みたいですね。

ボタンの表面を無理やりダブルクリックすれば、ボタンの標題も変えることができると思います。
「全部表示」とか「全件」とか、なんか適当に変えてくださいね。まあ、今日は練習なんで、そのまんまでもいいですよ。

で、このボタンのプロパティを見ます。
このボタン、わたしは「コマンド19」っていう名前です。みなさんのはなんて名前でしょ?
表題と名前は違いますんで、プロパティの「その他:名前」ってとこ、見てくださいね。
コンボボックス作ったときと同じで、このコマンドボタンにもれっきとした名前があるんですよ。
まあ、このコマンドボタンの場合、特に名前を変える必要ないと思いますんで、コマンドxxのまんまでいいかな。


さて、本題です。
このボタンをクリックしたら全部のデータを表示、つまりさっきのクエリーに切り替える、っていう動きを作ります。
その前に、このフォームが絞込みをするクエリーを基にしてるんだってこと、どこに指定してあるんでしたっけ???

フォームのプロパティの、「レコードソース」っていうとこでしたよね。フォームのプロパティの出し方、覚えてます?
忘れちゃったんですカー!!!えー、わたし、お話しましたよねー言いましたよねーぶーぶーぶー。

こういう操作はなれちゃってくださいよ。
左上の、赤い丸のとこ。ここをダブルクリックすれば、フォーム全体の設定をするプロパティが出てきますからね。
出てきたら、「レコードソース」ってとこ、見てください。
ここに選択されてるクエリーやテーブルが、このフォームの中に表示するレコードを左右するんです。
つまりね、全件表示させたいときはここに全部のデータを表示させるクエリーの名前を、絞り込みしたいときは絞込みをするクエリーの名前がここに出るようにすればいいんですよ。

どうやるのか、は、これからお話しますんで、とにかくなんでこんなことするのかってことだけ、しっかり押さえといてください。

まず、「コマンドボタンをクリックしたらレコードソース欄に全部のデータを表示させるクエリーの名前をぶちこむ処理」を作りましょう。
コマンドボタンのプロパティを再び出します。んで、「イベントプロパティ:クリック時」というところを探してください。

見つかりました???ない?ないってことはないでしょう。コマンドボタンのプロパティを見てます?フォームのプロパティじゃないですよ。

あったでしょ?コマンドボタンのイベントに「クリック時」がなくてどーすんですか。だいたいクリックして使うっしょ。ボタンって。
「クリック時」ってとこをクリックしてカーソル出すと、右側に[...]ってボタンが出るでしょ。そしたらそのボタンをクリックします。

マクロでもいいんですけど・・・。コードビルダでやりましょう。コードビルダを選んでください。

Private Sub コマンド19_Click()

Me.RecordSource = "Q全部表示"

End Sub

と、書きます。Me.RecordSourceってのは、さっき見ていただいた「レコードソース」っていうプロパティのことなんです。
だから、Me.RecordSource = "Q全部表示" で、「あたくしのレコードソースという欄に、Q全部表示という文字列を代入なさい」という意味になります。
Q全部表示って、クエリーの名前ですよね。
でも、クエリー名としてじゃなくて、あくまでも「レコードソースというプロパティの中の値」として代入するので、""で囲んで任意の文字列って感じで指定してやります。

できたかなー。
んじゃあ、VisualBasicのウィンドウだけ閉じましょう。んで、いちおうフォームを保存してから、フォームビューに切り替えてみましょうか。

コマンドボタン、クリックしてみてください。どうです?全部出ました?
クエリーの名前が間違ってなければ、いちおうなんかしらの動きがあるはずですよ。

ここまでは順調。。。でもでも、あれぇ???
組名をコンボから選んだら、何にもしなくなっちゃったぞ???んんん????

そりゃそうですよね。今、再クエリーしかしてないから・・・。
これじゃ100億回コンボボックス動かしたって抽出されないですよね。
だって、今、レコードソースの中身、Q全部表示になっちゃってますから・・・・このクエリーじゃ抽出しないじゃない???

だから、コンボボックスの更新後処理では、コンボボックスから組名を選んだらレコードソース欄に組名で絞り込むクエリーの名前をぶちこむ処理に変更しないといけません。


再びデザインビューに切り替えです。んでもって、コンボボックスのプロパティ出します。
でー・・・「イベントプロパティ:更新後処理」のとこ、クリックしましょう。[...]ボタンをクリックします。
この操作、お決まりです。これが「コンボボックスの更新後処理のイベントを変更しましょう」って指示があったら[...]ボタンまですっとたどり着けるようになると、作業効率ぐぐっと上がりますよ。あせることはないですけど、少しずつ慣れていって、目的と具体的な操作が結びつくようになると楽になると思います。

Private Sub 組名_AfterUpdate()
DoCmd.Requery
End Sub

今↑こうなってますよね。それを

Private Sub 組名_AfterUpdate()

Me.RecordSource = "Q組で抽出"

End Sub

こうします。原理は同じです。これなら、その都度クエリーが新しくなるってイメージになるので、再クエリーする必要はなくなるんです。


じゃ、VisualBasicのウィンドウだけ閉じて、フォームを保存しましょう。
改めてフォームビューに切り替えて・・・。

で、どうでしょう・・・。
いちおう、全部見たいときは全部見れるし、組で絞りたいときは絞り込めるようになりましたよね。

ふわー・・・つまづかずにここまでたどり着けました???お疲れさまでした。ちょっと一息入れてください。

あ、このフォーム、やっぱり「開いたとき」は、1件もデータ出てこないですよね。「コマンドボタン」か「コンボボックス」触らないと。
このままでもいい、って人もいると思いますが、いやだっていう人は・・・どこをどういじればいいのか・・・・・もうお分かりですよね。

フォームのレコードソースを、「Q全部表示」にしておけばいいんです。

単純に「絞込みの仕組み」っていっても、いろいろあるもんでしょ。っていうか、決まったやり方はないんですよ。
いろいろ工夫できるし、言い方を変えれば工夫しなくちゃいけないんです。「おまかせ」ってワケにはいかないんですよ。
だから、作り方を覚えるってよりも、クエリーとかフォームがどんな仕組みで働いているのか、全体のつながりをよく理解して、次に、じゃあ自分はどんな動作をしたらどんな結果が出てくるようなフォームを作りたいのか考える・・・で、理想に近づけていく、っていう段取りになるんです。

大切なのは、操作の順番を覚えることじゃなくて、皆さんがどういう名前のクエリーを作ったのか、なんて名前のテキストボックスを作ったのか、どういうタイミングで絞込みをすればいいのか・・・などなど、そういうことを考えながら操作をしなくちゃならないんだな、ってことを知るってことです。

難しい、って考えてしまわないで、いろいろなやり方があるんだ・・・って、そう解釈していってくださいね。