#584 ページ単位でRecordsetにアクセスする方法 VBA

通常、テーブルをRecordsetとして開いた場合、先頭から順番に各レコードをたどって行ったり、メソッドを使って特定のレコードをジャンプしたりします。しかしいずれの場合も、レコードソースの全レコードが対象となります。

一方、全レコードではなく、たとえば10件ごとにレコードにアクセスしたいという場合もあります。そのような場合、先頭レコードから1〜10レコードを空読みし、11〜20レコードだけ処理するという方法もありますが、ADOのあるプロパティを利用すると、たとえば10件といった単位をひとつの”ページ”として、ページ単位でアクセスすることができます。


それには、ADOのRecordsetオブジェクトの「PageSize」プロパティを利用します。これに任意の値を指定することで、1ページ当りのレコード件数を指定することができます。

また、「AbsolutePage」プロパティにページ番号を指定することで、実際に読み込むページ番号を指定することができます。たとえば「PageSize」プロパティに「10」が指定されている場合、「AbsolutePage」プロパティを「3」とすることで、3ページ目にジャンプし、簡単に31〜40レコード目だけを読み取ることができます。

また「PageCount」プロパティの値を取得すると、全レコードが何ページ分になるかを確認することもできます。


次の例は、tbl得意先テーブルより、引数に指定された”ページ番号”だけのレコード内容をイミディエイトウィンドウに出力するSubプロシージャの例です。1ページ当りのレコード件数は「5」としています。

Public Sub ReadPageRec(lngPageNum As Long)

  Dim cnn As New ADODB.Connection
  Dim rst As New ADODB.Recordset
  Dim intRecordCnt As Integer

  Set cnn = CurrentProject.Connection
  With rst
    .Open "tbl得意先", cnn, adOpenStatic, adLockReadOnly, adCmdTableDirect
    .PageSize = 5
    If lngPageNum > .PageCount Then
      Debug.Print "最終ページを超えています。"
    Else
      .AbsolutePage = lngPageNum
      For intRecordCnt = 1 To .PageSize
        If .EOF Then
          Exit For
        Else
          Debug.Print !得意先コード, !得意先名
        End If
        .MoveNext
      Next intRecordCnt
    End If
    .Close: Set rst = Nothing
  End With
  cnn.Close: Set cnn = Nothing

End Sub



実行例:
■テーブルの内容
テーブルの内容
※このテーブルには51レコード、すなわち1ページ当り5レコードとした場合、11ページまであることになります。

イミディエイトウィンドウからの実行結果
イミディエイトウィンドウからの実行結果
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved