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



■Query3 :フォームから条件を入力して検索

ここまで来るとですねぇ。やってみたいことがいろいろ出てくるんじゃないですかね。
「こういうことはできないのかな」という発想こそ、データベース作りに欠かせないものなんですよね。

じゃあ、ひとつ上級技に挑戦してみましょうか。例えば。。。

最初に作った[照会フォーム]に、テキストボックスをいっこ追加しましょう。
え、なんでって?いいからいいから。だまされたと思ってやってみてください。

なんか、「非連結」って出てますね。
これは、「基にしているテーブルの中の、どのフィールドとも結びついてないただのテキストボックス」という意味です。

位置とか大きさとかはお任せします。で、ラベルが左側に出ますよね。
なんかテキストxxとか出てますけど、これじゃ何のことか分からないんで、無理矢理書き換えましょう。
え、やりかた忘れちゃいました?
いやだなぁ。
ラベルの「テキストxx」っていう字のあたりでむりやりダブルクリックかなんかすれば、カーソル出てきましたよね。
で、入力しちゃいます。

そうですねぇ。"学籍番号を入力しなさい"とでも入力しましょうか。

で、今度はテキストボックスの方のプロパティを見ます。
「その他」のプロパティのところに名前っていうのがありますよね。このテキストボックスの名前です。
名前は書きかえることもできますので、他の名前にしてもいいですよ。
でもまあ、今日は練習なんで、このまんま行こうかな。

あたしのは"テキスト6"ってなってました。みなさんのはなんてついてるでしょう。確認しておいてくださいね。

[照会フォーム]というフォームに、[テキスト6]っていうテキストボックスを作りました。


では、次にクエリーを作ります。
[名簿テーブル]を基に、新しくクエリーを作成してください。

このクエリーの目的は
[照会フォーム]というフォームに、[テキスト6]っていうテキストボックスに入力された学籍番号のレコードを検索して表示する
という具合にしたいんです。

まず、どんなクエリーになりそうか、イメージしてみてください。

まず、クエリーの表示結果としては、テーブルの中のフィールド全部選びたいんですけど、いちいち全部選ぶのめんどくさいですよねえ。
そういうときは、フィールドのリストの中の、米印みたいなやつをグリッドに選びます。
これは、「テーブルの中のフィールド全部」という意味で、こういうとき便利です。
使い方としては、下の図でいうところの紫色の四角枠の部分を、ダブルクリックします。

で、さらに、[学籍番号]も選びます。

で、このままだと、[学籍番号]を2回選ぶことになっちゃいますよね。
まあ、別に支障はないと思いますけど、2つも要らないんで、右側の[学籍番号]の「表示」欄のチェックをはずします。
チョンとチェックマークがついてますよね。ここをクリックして、マークをはずすんです。

これで、「抽出条件の指定はするけど、表示はしない」という役割を担うフィールドになります。

で、肝心の「抽出条件」です。

今非表示にした[学籍番号]の「抽出条件欄」に、以下のように入力します。
半角全角の区別、間違えないように気を付けてくださいね。

forms![照会フォーム]![テキスト6]

これで、「照会フォームの中のテキスト6と同じ学籍番号」という意味になります。
これはAccessでは決まり文句みたいなもんなので、書き方を覚えておくとあとあと役立つと思います。

枠が狭くて入力しにくい場合は、広げることもできます。
上の図で行くところのピンク色のあたりをドラッグすると、枠の幅を換えることができます。

で、開こうとすると・・・。

えっ???なに?なにこれ?????

慌てない慌てない。これは、「照会フォームっていうのを探したけど、今開いてないフォームみたいよ、見つからなかったわよ」という意味です。
見つからなかったので、このクエリーを開くために必要な情報をちょうだい、と言ってるんですね。

一回[キャンセル]の方をクリックして、戻りましょう。
で、チョコっとクエリーのウィンドウをずらしてデータベースウィンドウを覗きます。
[照会フォーム]、開きましょう。いいから。開きます。

で、誰かの学籍番号を、[テキスト6]に入力します。
カーソルがそのテキストボックスの中にあるままだと、入力が終わった印にならないんで、できればEnterキーを押すとか、他のテキストボックスをクリックしたりして、カーソルを他のところに移動させておいてください。

で、さっきのクエリーを改めて開きます。と・・・。

おわかりいただけますか?
とりあえず、クエリーの抽出条件として、フォームのテキストボックスを指定することができました。
でも、まだ完成じゃないですよ。これからが本番です。まだフォームの方、変更してないですからね。

このクエリー、名前を付けて保存します。そうですねぇ。[検索クエリー]とでもしましょうかね。

で、クエリーの方は閉じておいて、[照会フォーム]をデザインビューに切り替えます。

フォームのプロパティのレコードソース欄を、[名簿テーブル]から[検索クエリー]に変更します。一覧から選択できるはずです。

[検索クエリー]では、[名簿テーブル]の中のすべてのフィールドを選んでますし、このフォームに必要なフィールドは全部表示するようになってますよね。
例えば[検索クエリー]を作るとき[学部]フィールドを選び忘れちゃってるとすると、このテキストボックスの中身、エラーになっちゃいます。

テキストボックスひとつひとつも、ちゃんとテーブルの中のフィールドと結びついてるんでしたよね。


さて、さっき、「デビッドさんのかせぎを5000円に入力しなおしても、クエリーを開きなおさないとクエリーの抽出条件が反映されなかった」っていう現象、ありましたよね。
そこまで忙しく働かないので、学籍番号を指定したら、再度クエリーを開きなおすっていう動作が必要になるんです。

これをやるための、おまじないみたいなやつを指定して完成です。とにかくやってみましょう。

[テキスト6]のテキストボックスのプロパティを出します。で、「イベント」というところを見ましょう。なんかいろいろ並んでますよね。
で、「更新後処理」と書かれている枠の中をクリックします。と、右側にちっちゃいボタンがふたつ出てきますよね。

と、こんな感じの画面が出てきますよね↓
なんかよくわかりませんが、とにかく「コードビルダ」っていうのを選んで[OK]してください。

いいからいいから。

なんかわけのわかんないだだっ広いウィンドウが出てきます。
よく見るとなんか文字がごちゃごちゃ入力されてますね。こうなってません?

Private Sub テキスト6_AfterUpdate()

End Sub

この2行の間に、次のように入力します。いいの、意味なんてあとで。とにかくやってみましょうって。
入力は全部半角です。変な表示が出たりしますが、最終的に下のように入力されてれエラーにならなければオッケーです。

DoCmd.Requery

これで完了。この真っ白なウィンドウだけ閉じます。


じゃ、試してみましょう。フォームビューに切り替えると・・・多分、何にも表示されないと思います。
[テキスト6]には、前に入力した学籍番号が残ってるかな・・・。まあ、細かいことは気にしない。

これ、なんで何も出なくなったかは、お分かりですよね。
このフォームが基にすることになった[検索クエリー]の抽出条件が、「フォームのテキスト6の学籍番号と同じもの」だから、テキスト6が空っぽだったり、なんかタイミング悪くて中の値を拾うことができなかったりしたら、当然該当レコードはゼロ件ということで、何にも出さないんです。

ま、慌てずに。なんか学籍番号、テキスト6に入力してください。
[学籍番号]のテキストボックスに入力しちゃだめですよ。え?なんでかって?なんでそんなこと疑問に思うんですカー。
こっちのテキストボックスは、テーブルの中の[学籍番号]フィールドとつながってんですよ。この人の学籍番号が書き換わっちゃうじゃないですか。

さて、学籍番号入力して、Enterキーを押すと、その学籍番号を持つ人の情報がフォームに出てくるはずなんですけどね。いかがでしょう。