|

|
|
 |
2.6 レコードセットの操作/検索 |
 |
|
|
|
|
|
レコードセットオブジェクト内の特定のレコードを検索する方法です。
条件にマッチする先頭のレコードへジャンプ(読み込み)したいときは、レコードセットオブジェクトのFindFirstというメソッド、条件にマッチする最終のレコードへジャンプ(読み込み)したいときは、レコードセットオブジェクトのFindLastというメソッドを実行します。
ただし、条件にマッチするレコードが1件しか無いときは、どちらを使っても結果は同じです。
|
|
|
|
|
|
|
|
|
|
FindFirstの使用例です。検索条件は、フィールド名=値の形式で指定します。たとえば、フィールド「漢字氏名」が古畑忍三郎のレコードを検索するときは次の通りです。
daoRS.FindFirst "漢字氏名 = '古畑忍三郎'"
|
※FindFirstの検索条件で文字列を指定するときは、文字列を’で囲みます。
また、AndやOrを用いて複数のフィールドを指定することができ、例えばフィールド「性別」が1で、フィールド「関係」が2のレコードを検索したいときは次の通りです。
daoRS.FindFirst "性別 = 1 and 関係 = 2"
|
条件にマッチするレコードの有無は、NoMatchプロパティで参照でき、Trueがヒットするレコードなし、Falseがヒットするレコードありです。
以下の例では、「住所録テーブル」というテーブルをオープンした後、FindFirstメソッドを使い、条件にヒットする先頭のレコードへカーソルを移動(読み込み)しています。
Sub prcFindFirst2000()
'Access VBA Tips
'2.6 レコードセットの操作/検索
'Access2000以降での手順
Dim daoDB As DAO.Database
Dim daoRS As DAO.Recordset
'データベースのオープン(データベースオブジェクトの作成)
Set daoDB = CurrentDb
'テーブルのオープン(レコードセットの作成)
Set daoRS = daoDB.OpenRecordset("住所録テーブル", dbOpenDynaset)
'条件にヒットする先頭レコードへカーソルを移動します
daoRS.FindFirst "漢字氏名 = '古畑任三郎'"
'条件にヒットするレコード有無のチェック
If daoRS.NoMatch = False Then
'条件にヒットするレコードがあったときは
'イミディエイトウィンドウへカナ氏名を表示します
Debug.Print daoRS("カナ氏名")
Else
'条件にヒットするレコードがなかったときは
'イミディエイトウィンドウへ「???」を表示します
Debug.Print "???"
End If
'テーブルのクローズ
daoRS.Close
'データベースのクローズ
daoDB.Close
End Sub
|
※Access2000以降の場合。ただし、DAOを使うときは参照設定が必要です。
Sub prcMoveFirst97()
'Access VBA Tips
'2.6 レコードセットの操作/検索
'Access97までの手順
Dim daoDB As Database
Dim daoRS As Recordset
'データベースのオープン(データベースオブジェクトの作成)
Set daoDB = DBEngine.Workspaces(0).Databases(0)
'テーブルのオープン(レコードセットの作成)
Set daoRS = daoDB.OpenRecordset("住所録テーブル", DB_OPEN_DYNASET)
'条件にヒットする先頭レコードへカーソルを移動します
daoRS.FindFirst "漢字氏名 = '古畑任三郎'"
'条件にヒットするレコード有無のチェック
If daoRS.NoMatch = False Then
'条件にヒットするレコードがあったときは
'イミディエイトウィンドウへカナ氏名を表示します
Debug.Print daoRS("カナ氏名")
Else
'条件にヒットするレコードがなかったときは
'イミディエイトウィンドウへ「???」を表示します
Debug.Print "???"
End If
'テーブルのクローズ
daoRS.Close
'データベースのクローズ
daoDB.Close
End Sub
|
※Access97までの場合。
|
|
|
|
|
|
|
|
|
|
FindLastの使用例です。検索条件の指定やヒットするレコードの有無はメソッドと同様です。
以下の例では、「住所録テーブル」というテーブルをオープンした後、FindLastメソッドを使い、条件にヒットする最後のレコードへカーソルを移動(読み込み)しています。
Sub prcFindLast2000()
'Access VBA Tips
'2.5 レコードセットの操作/先頭と最後
'Access2000以降での手順
Dim daoDB As DAO.Database
Dim daoRS As DAO.Recordset
'データベースのオープン(データベースオブジェクトの作成)
Set daoDB = CurrentDb
'テーブルのオープン(レコードセットの作成)
Set daoRS = daoDB.OpenRecordset("住所録テーブル", dbOpenDynaset)
'条件にヒットする最終レコードへカーソルを移動します
daoRS.FindLast "漢字氏名 = '古畑任三郎'"
'条件にヒットするレコード有無のチェック
If daoRS.NoMatch = False Then
'条件にヒットするレコードがあったときは
'イミディエイトウィンドウへカナ氏名を表示します
Debug.Print daoRS("カナ氏名")
Else
'条件にヒットするレコードがなかったときは
'イミディエイトウィンドウへ「???」を表示します
Debug.Print "???"
End If
'テーブルのクローズ
daoRS.Close
'データベースのクローズ
daoDB.Close
End Sub
|
※Access2000以降の場合。ただし、DAOを使うときは参照設定が必要です。
Sub prcFindLast97()
'Access VBA Tips
'2.5 レコードセットの操作/先頭と最後
'Access97までの手順
Dim daoDB As Database
Dim daoRS As Recordset
'データベースのオープン(データベースオブジェクトの作成)
Set daoDB = DBEngine.Workspaces(0).Databases(0)
'テーブルのオープン(レコードセットの作成)
Set daoRS = daoDB.OpenRecordset("住所録テーブル", DB_OPEN_DYNASET)
'条件にヒットする最終レコードへカーソルを移動します
daoRS.FindLast "漢字氏名 = '古畑任三郎'"
'条件にヒットするレコード有無のチェック
If daoRS.NoMatch = False Then
'条件にヒットするレコードがあったときは
'イミディエイトウィンドウへカナ氏名を表示します
Debug.Print daoRS("カナ氏名")
Else
'条件にヒットするレコードがなかったときは
'イミディエイトウィンドウへ「???」を表示します
Debug.Print "???"
End If
'テーブルのクローズ
daoRS.Close
'データベースのクローズ
daoDB.Close
End Sub
|
※Access97までの場合。
|
|
|
|
|