Microsoft Access Club >DAO入門講座 >このページ >次頁 < 前項  サイト内検索


カレントレコードの検索_テーブルタイプ : DAO入門講座



今回は、レコードの検索を取り上げます。seekメソッドを用いて、テーブルレコードを検索することができます。

レコードの検索を行うメソッドには、SeekメソッドとFind系メソッドがあり、下記のRecordsetオブジェクトタイプによって、使い分けが異なります。

  • テーブルセットタイプ : Seekメソッド
  • ダイナセットタイプ : Find系メソッド
  • スナップショットタイプ : Find系メソッド

Seekメソッドを用いる場合は、レコードタイプのレコードセットにインデックスが設定されている必要がありますが、最も高速で動作します。

検索手順

手順としては、下記のような行います。

  1. Recordsetオブジェクトにカレントインデックスを作成する。
  2. Seekメソッドを用いて検索する。
カレントインデックスの作成

テーブルを作成する時に、特定のフィールドにインデックスを作成することがあります。その時の説明では、検索時間が短縮される、と書かれていることが多いのですが、まさにこの検索のことです。

  • テーブルでは、複数のフィールドにインデックスを作成できます。
  • 主キーを設定すれば、そのフィールドに対して自動的にインデックスが作成されます。
カレントインデックス
  • 検索で利用するテーブルフィールドのことを言います。設定は、Indexプロパティで行います。
NoMatchプロパティ

Seekメソッドを利用する場合、NoMatchプロパティの値を調べることで、 該当するレコードが見つかったか、否かが分かります。

  • レコードが見つかった場合 : NoMatchプロパティの値が、False。
  • レコードが見つからない場合 : NoMatchプロパティの値が、True。
留意事項
  • NoMatchプロパティがTrueの状態である場合は、カレントレコードは未定義になっています。この時に、カレントレコードを参照するとエラーになります。

テーブルレコードを検索する

下記のプロシージャは、InputBoxステートメントを利用して取引先名に応じた詳細データをメッセージボックスに表示します。

Sub SeekSample()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim varMatch As Variant
    
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("請求情報リスト")
    
    varMatch = InputBox("取引先名を入力します。", , "松村物産商事(株)")
    
    rs.Index = "取引先名" ' --- A
    rs.Seek "=", varMatch ' --- B
        
    If Not rs.NoMatch Then ' --- C
        varMatch = rs!ID
        varMatch = varMatch & " : " & rs!納品日
        varMatch = varMatch & " : " & rs!取引先名
        varMatch = varMatch & " : " & rs!請求月
        varMatch = varMatch & " : \" & rs!請求額
    Else ' ---D
        varMatch = "該当データなし。"
    End If
    
    MsgBox varMatch
    
    rs.Close: Set rs = Nothing
    db.Close: Set db = Nothing
    
End Sub
解説
  1. Indexプロパティを用いて、「取引先名」フィールドをカレントインデックスに設定します。
  2. Seekメソッドに、InputBoxステートメントで入力した取引先名を代入します。
  3. NoMatchプロパティの値がFalseであれば、以下に進みます。
  4. NoMatchプロパティの値がTrueであれば、以下に進みます。
請求情報テーブルデータ

  1. InputBoxステートメントを開く

  1. マッチした検索データを表示します。

留意点

Seekメソッドを用いるために、Indexプロパティを「取引先名」フィールドに設定しました。しかし、このフィールド自体に、インデックスが設定されていなければ、下記の実行時エラーが発生しますので注意が必要です。

これを避けるためには、下記のフィールドプロパティにインデックスを設定します。

関連ページ

 

2004/05/14

ページの先頭へ 前ページへ戻る

 


カレントレコードの検索_テーブルタイプ : DAO入門講座


 

-Microsoft Access Club-

PLESKやcPanelを思いのまま、ヨーロッパのフランス、ドイツ等の大手データセンターに配置しています。。
PLESKパネルやcPanelパネルを思いのまま..
ヨーロッパ大手データセンターを利用できます。