メールマガジン【アクセスで作るシリーズ】


バックナンバー 【会計ソフト編】 Vol.52
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

    ACCESSで作るシリーズ  【会計ソフト編】

    発 行 : Yoshihisa Fukuda          2001. 5. 6 Vol.52

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
--------------------------------------

 前回はデータの追加、更新、削除の方法を紹介しました。
 今回はデータを検索する方法を解説します。

== ◇ 第5章 拡張機能     ====================

--------------------------------------
 第7回 VBAでのテーブル操作(続き)
--------------------------------------

 前回と同様に SAMPLE_DB.MDB というデーターベースの中に ABC_TABLE と言う
 テーブルがあり FIELD_1(テキスト型)のフィールドがあるとしましょう。
 今回は、複数のレコードの中から、FIELD_1 のデータを検索するプログラムを作成
 してみましょう。

◆レコードを検索する
 まず、最初にデータベースを開き、そのデーターベースオブジェクトを使用して
 テーブルを開きレコードセットを獲得します。

 Dim SMPL_DB As Database
 Dim ABC_T As Recordset

 Set SMPL_DB = CurrentDb
 Set ABC_T = SMPL_DB.OpenRecordset("ABC_TABLE", dbOpenDynaset)

 では、レコードセットを使って[あ]という文字を検索しましょう。
 まず、FIELD_1 に[あ]という文字が含まれているという検索条件式を記述します。

 "FIELD_1 like '*あ*'"   となります。

 like とは指定した文字のパターンを比較します。
 この場合、'*あ*'という文字パターンが含まれているか比較します。
 '*あ*'と[あ]の前後に[*]が付いていますが、これはワイルドカード文字といい
 任意の数の文字を指します。
 この[*]を取ると[あ]が含まれるでは無くてFIELD_1が[あ]のレコードを検索する
 事になります。
 [あ]をシングルクォーテーション(')で括っているのは文字列だからです。
 数値の場合、シングルクォーテーションで括る必要はありません。

 また、FIELD_1が[あ]で始まるレコードを検索したい場合は、'あ*'と記述します。

 検索をコードで書くとFindFirstメソッドを使用して以下のように書きます。

 ABC_T.FindFirst "FIELD_1 like '*あ*'"

 お気付きの方も居られるかと思いますが、OpenRecordsetで今まではテーブル名
 だけ指定していましたが、今回はその後ろにdbOpenDynasetと言う引数が付いてい
 ます。
 これは以前にでてきましたが、テーブルをダイナセットタイプで開いています。
 (詳しくはVol.49参照)

 この様にFindFirstメソッドを使用する時はダイナセットタイプでオープンしなくて
 はいけませんので注意して下さい。

 後は、検索文字列を書き換えるだけで、好きなデータを検索する事ができます。
 数値ならば < や > を使って以上、以下や範囲指定もできます。
 そして、前回、前々回の表示、更新、削除を使えば、検索したレコードを自由に
 操作できます。

◆レコードを検索する その2
 検索にはFindFirstメソッドの他にSeekメソッドと言うのがあります。
 こちらは、検索するフィールドがインデックスでなければなりません。

 今回の ABC_TABLE に FIELD_2 を追加しましょう。
 数値型でインデックスを[はい(重複あり)]にします。

 そして、以下のコードで検索できます。

 Dim SMPL_DB As Database
 Dim ABC_T As Recordset
 Dim SerchStr As String

 Set SMPL_DB = CurrentDb
 Set ABC_T = SMPL_DB.OpenRecordset("ABC_TABLE")

 SerchStr = SerchText

 ABC_T.Index = "FIELD_2"

 ABC_T.Seek "=", SerchStr

 If ABC_T.NoMatch = True Then
  MsgBox "該当データがありません"
 Else
  MsgBox ABC_T.Fields("FIELD_1")
 End If

 ABC_T.Close
 SMPL_DB.Close

 Set ABC_T = Nothing
 Set SMPL_DB = Nothing

 注意点として、Seekメソッドの場合、OpenRecordsetはダイナセットタイプにする
 必要はありません。
 但し、検索できるフィールドは必ずインデックスでなければなりません。
 そして、10行目にあるようにIndexプロパティを設定しなくてはいけません。

 Seekメソッドの最初の引数は "=" 以外に "<" ">" "<=" ">=" などがあります。
--------------------------------------
4回に渡り、VBAでのテーブル操作を解説しました。
これで基本的な事は大体出来ると思います。
次回からは数回に分けて、SQLに関する解説をしていきたいと思います。
______________________________________
◆◇ Q&Aコーナー    ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

 今回はありません。
______________________________________
◆◇ お知らせ       ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

 今回のメールマガジンVol.52とアンケートは、『まぐまぐ』のメンテナンスの事情
 により、配信日が遅れております。
 ご了承下さいますよう、よろしくお願いいたします。
 
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

◇ ACCESSで作るシリーズ 【会計ソフト編】
◇ 発 行 元  :Yoshihisa Fukuda(福田 義久)
◇ ご意見・ご要望
  ご質問等   :y.fukuda@ro.bekkoame.ne.jp

◇ このメールマガジンは、インターネットの本屋さん『まぐまぐ』を利用して発行
  しています。(まぐまぐID:0000030446)
◇ バックナンバー:http://www.bekkoame.ne.jp/ro/y.fukuda/
◇ 登録・解除  :http://www.bekkoame.ne.jp/ro/y.fukuda/

 Copyright(C) 2000-2001 Yoshihisa Fukuda All rights reserved.

◇転載について
 このメールマガジンの無断転載などは、一切禁止です。
 転載をご希望の方は、事前にメールで連絡をください。
◇免責
 このメールマガジン及びホームページの内容による、いかなる損害、障害などに
 関して発行者は一切の責任を負いません。
 掲載広告についても同様です。
______________________________________
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□