| <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…を使って、こんなふうに分岐させてみました。

これなら、テーブルに存在しない商品名で検索しても、妙なメッセージではなく、「ありませんね」と回答してくれると思います。
| |