<HOME <お願い事項 <Access2000 TOP <Access97 TOP <サイト内検索 | ||
Ac2002--VBAの沼 > 検索する | ||
1 2 |
では次に・・・。
「テーブルの中に、そのレコードがあるかどうか」をチェックするプロシージャを作ってみましょう。
いわゆる「検索」ですね。
これも、クエリ使った方が絶対実用的なんですけどねぇ・・・何事も勉強ですね。がんばってやってみましょう。
こんな感じのテーブルがあったとします。いろんな商品が入力されてますね。
今回は、単に検索をするだけなので、「静的なカーソル(書き込みをしない、Openしたときのレコードセットの状態が見れればよい)」でレコードセットを開きます。練習用のテーブルなので件数少ないからあんまりインパクトないですけど、単に検索するだけならこの方法で開くのが一番スピードは速いのです。
書き込むつもりがないので、その分1レコードにかける時間を短く短縮して処理しようとしますのでね。
と、後は、まあ、だいたい同じようなもんです。
検索の仕方なんですが・・・。
Findというメソッドを使います。
これは、Findの後ろに条件式を「文字列」として入力しておくことで、条件を満たしたレコードがあるかないかチェックするという仕事をするメソッドです。
「文字列として」式を入力しますので・・・。
式の部分は、ダブルコーテーションで囲むのが基本です。
このダブルコーテーションの中に入れたい式は、
商品名=”あげパン”
これです。
でも・・・残念かな、ダブルコーテーションの中にダブルコーテーションを入れることはできません。
そこで、内側のダブルコーテーションをシングルコーテーションにします。
検索対象となるフィールドが数値の場合は、ダブルコーテーションで囲む必要がないので、
値段=300
条件式は、こうなります。
シングルコーテーションとダブルコーテーションの使い分け、皆さんOKですか?
これ分からないと、条件式書くときけっこうきついので、ぜひともおさえておいてくださいね。
で、探した結果、見つかったものを、MsgBox関数を使って表示させてみましょう。
こんな感じかな・・・。もう、とりあえず練習なので、&でつなげただけで出しちゃいます。
入力できたらコンパイルして、綴り間違いとかないかどうかチェックしておきましょう。
イミディエイトウィンドウにプロシージャ名を入れてEnterキーを押します。
まだ、前に入力したプロシージャ名が残っていたら、右端にカーソルを移してEnterキーを押すんでも実行できますよ。
出ます?
とりあえずここで第一段階ですね。
さてー・・・ここからが正念場です。
もし、検索対象となる商品が、テーブルの中になかった場合・・・。
と、例えば、いまんとこ「パン」という商品はないので、
こんなわけのわからないエラーが出ちゃいます。
要はこれ、見つからなかったということを言いたいのですが、いかんせんVBAなので、こんなもったいぶった言い方しかできません。
BOF、EOFというのは、レコードセットのプロパティです。
Bofore of File と End of File の略かな。
BOFは、最初のレコードより前を表します。
EOFは、最後のレコードより後を表します。
つまりどっちも、レコードセットの欄外、ということですね。
最後まで見たけど、なかった、外に出ちゃった、ということを表したげなわけです。
そこで、もし、1件も該当商品がなかった場合に、こんなへんちくりんなメッセージじゃなくてもっとわかりやすいメッセージを出すようにしたいなぁと思うわけで・・・。If….Else…を使って、こんなふうに分岐させてみました。
これなら、テーブルに存在しない商品名で検索しても、妙なメッセージではなく、「ありませんね」と回答してくれると思います。