#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 実行例:
|
|||
|
Copyright © T'sWare All rights reserved |