Chapter5-4 レコードの移動

レコード移動のメソッド

レコードセットには、複数のレコード/フィールドのデータが格納されていますが、開いた直後は1レコード目だけが見られる状態にあります(注)。フォームでいうなら"単票形式"であり、他のレコードを見るにはレコード移動を行なわなければなりません。
それらの命令は、次表のような、Recordsetオブジェクトのメソッドとして用意されています。
なお、これらのメソッドはレコードのポインタを移動させるもので、レコード移動後もその1レコード分だけしか見ることができません。


(注)Recordsetオブジェクトの全レコード・全フィールドを一気に配列に、いわば表形式で格納できる「GetRows」というメソッドもあります。



■任意のレコードへ移動してデータを出力する例
Dim dbs As Database
Dim rst As Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl書籍情報")
With rst
  .MoveLast
  Debug.Print !ISBN, !タイトル, !著者, !発行日, !価格
  .MovePrevious
  Debug.Print !ISBN, !タイトル, !著者, !発行日, !価格
  .MovePrevious
  Debug.Print !ISBN, !タイトル, !著者, !発行日, !価格
  .MoveFirst
  Debug.Print !ISBN, !タイトル, !著者, !発行日, !価格
  .MoveNext
  Debug.Print !ISBN, !タイトル, !著者, !発行日, !価格
  .MovePrevious
  Debug.Print !ISBN, !タイトル, !著者, !発行日, !価格
  .Close
End With



■すべてのレコードをトレースする例
Dim dbs As Database
Dim rst As Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl書籍情報")
With rst
  Do Until .EOF
    .MoveNext
  Loop
  .Close
End With


EOFプロパティとBOFプロパティ


■レコード数を調べてすべてのレコードをトレースする例
Dim dbs As Database
Dim rst As Recordset
Dim lngRecMax As Long
Dim ilngLoop As Long

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl書籍情報")
With rst
  lngRecMax = .RecordCount
  For ilngLoop = 1 To lngRecMax
    Debug.Print !ISBN, !タイトル, !著者, !発行日, !価格
    .MoveNext
  Next ilngLoop
  .Close
End With


RecordCountプロパティ

  • Recordsetオブジェクトのレコード数が格納されている

  • これを使ってFor〜Nextステートメントで全レコードにアクセスできる

  • テーブルの場合は常に”総レコード数”を返すが、クエリやSQL文を指定した場合、あるいはOpenRecordsetメソッドの引数にダイナセットタイプ・スナップショットタイプ・前方スクロールタイプを指定した場合には、”アクセスされたレコード数”として扱われる。そのため、総レコード数としての正しい値を得るためには、いったん最終レコードに移動したあとにこのプロパティ値を取得する必要がある。

    →「.MoveLast」「.MoveFirst」「lngRecMax = .RecordCount」のようなコードを続けて実行する
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved