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

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