スポンサードリンク

Access VBA DAOでレコードを検索する方法。

VBA のプログラムから、テーブルにあるレコードを検索してみましょう。

Accessで検索する方法はいろいろありますが、今回はインデックスを設定したフィールドを検索できる「Seekメソッド」を使います。

実はレコードを検索できるということは、探し出して表示すること以外にも、重要な役割があります。

例えばレコードを更新、削除するには、対象となるレコードを検索して、そのレコードまで移動する必要があります。

したがって検索は、他の操作にも関係してくる重要なものです。


【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」を開きます。

access-vba-208.gif


【2】最後のレコードが、「99 ハワイ」になっていることを、確認しておいてください。

access-vba-203.gif

練習用として更新、削除でも使いますので、無い場合は作成しておいてください。

レコードを確認したらテーブルを閉じます。


【3】続いて VBE を起動し、標準モジュールの test6 を表示します。

access-vba-201.gif

*VBEは「Altキー」+「F11キー」で起動できます。


【4】「test6」に以下のように、Subプロシージャ seekData() を追加します。


Sub seekData(pCd As Integer)
  Dim db As DAO.Database
  Set db = CurrentDb
  
  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset("T01Prefecture")
  
  rs.Index = "Primarykey"
  rs.Seek "=", pCd
  
  If rs.NoMatch Then
    Debug.Print "該当するレコードは見つかりませんでした。"
  Else
    Debug.Print pCd & ":" & rs.Fields("PREF_NAME")
  End If
  
  rs.Close
  Set rs = Nothing
  db.Close
  Set db = Nothing
  
End Sub


access-vba-202.gif


プログラムの準備ができたら、実行してみましょう。

【5】イミディエイト ウィンドウから seekData() を実行してください。

call seekData(99)

access-vba-204.gif

*引数にはテーブルに存在する PREF_CD を指定します。


【6】該当するレコードが表示されました。

・PREF_CD が 99 の場合
access-vba-205.gif

・PREF_CD が 1 の場合
access-vba-206.gif

・PREF_CD が 100 の場合(存在しない)
access-vba-207.gif


【7】他の条件でもいろいろ検索してみてください。



【解説】

(1)Seekメソッドは、インデックスが設定されたフィールドを検索する時に使います。主キー(Primarykey)は、自動的にインデックスが設定されるので、すぐに使うことができます。

・テーブルデザイン画面
access-vba-209.gif

*他のフィールドを使う場合は、インデックスを設定する必要があります。


(2)イミディエイト ウィンドウから、seekData() を引数を指定して呼び出しています。

call seekData(99)

*引数は整数型なのでそのまま書きます。


(3)整数型(Integer)の引数を、1つ受け取ります。

Sub seekData(pCd As Integer)


(4)インデックスにプライマリーキーを指定しています。

rs.Index = "Primarykey"


(5)引数として受け取った番号(PREF_CD)で、レコードを検索します。

rs.Seek "=", pCd


(6)If Then Else ステートメントについて

条件式で処理を分岐することができます。以下の例では、レコードが見つからなかった時に、条件式の rs.NoMatch が 真 (True) になります。

もしレコードが見つからなかったらメッセージを表示して、見つかったら都道府県名を表示するという処理です。

If rs.NoMatch Then
  Debug.Print "該当するレコードは見つかりませんでした。"
Else
  Debug.Print pCd & ":" & rs.Fields("PREF_NAME")
End If

*条件式には、真 (True) か偽 (False) になる数式か文字列式を指定します。
もっと詳しく知りたい場合は、 Microsoft Visual Basic のヘルプをご覧ください。


(7)レコードを表示できたということは、対象となるレコードに移動できたということです。(重要) 移動できたら、更新、削除は簡単です。


(8)今回は主キーのフィールドで検索したので、見つかるレコードは必ず1件だけです。何故なら主キーには重複したデータが保存できないからです。(重要)


【ワンポイント】
今回は Seekメソッド を使いましたが、他にも FindFirstメソッド や Bookmark などいろいろな方法があります。

しかしデータベースを操作するには、SQL文を使ったほうが、強力でしかも楽です。後々はSQL文を使う方法に、プログラムを書き換えます。

でもSQL文以外の方法も知っておいたほうが、SQL文の便利さをより実感できるし、後々きっと役立ちます。


スポンサードリンク






Access VBA 初心者入門講座 TOPへ