#030 | 現在のレコード番号を取得・移動するには?(ページング操作) | VBA | |
Recordsetオブジェクトの[AbsolutePosition]プロパティを使うと、現在のレコード番号を取得したり、指定したレコード番号に移動したりすることができます。なお、ここでいうレコード番号とはデータシート上の行番号にあたるものです。[AbsolutePosition]プロパティを応用すると、例えば、得点順に降順に並べ替えられた"試験成績テーブル"のようなものから、現在のレコードの受験者の順位を取得することができます。 まず次のコードが、[AbsolutePosition]プロパティを使ってテーブル tblTest の任意のレコード番号に移動し、そのフィールド(Data)の内容をデバッグウィンドウに表示するサンプルコードです。 Dim dbs As Database
Dim rst As Recordset Set dbs = CurrentDb '[AbsolutePosition]プロパティを使う場合は、ダイナセットまたはスナップショットでRecordsetオブジェクトを開きます Set rst = dbs.OpenRecordset("tblTest", dbOpenDynaset) '[AbsolutePosition]プロパティを使う場合は、いったん最後のレコードに移動して全レコードを認識させる必要があります rst.MoveLast '先頭レコードの[AbsolutePosition]プロパティの値は 0 なので、 '移動したいレコード番号から -1 引いた値をセットします。 '6 番目のレコードに移動したい場合は rst.AbsolutePosition = 6 - 1 Debug.Print rst!Data '15 番目のレコードに移動したい場合は rst.AbsolutePosition = 15 - 1 Debug.Print rst!Data '先頭レコードに移動したい場合は rst.AbsolutePosition = 0 Debug.Print rst!Data '最後のレコードに移動したい場合は rst.AbsolutePosition = rst.RecordCount - 1 Debug.Print rst!Data rst.Close 続いて次のコードは、1画面(ページ)に10件ずつテーブルの内容を表示し、次ページ・前ページと10件単位でレコード移動と表示を行う、いわゆる「ページング操作」の一例です。 Option Compare Database
Option Explicit Private pdbs As Database Private prst As Recordset '画面の先頭に表示されているレコード番号のカウンタ Private plngRecNum As Long '1ページ当りに表示されるレコードの件数 Private Const Private Sub Form_Load() Set pdbs = CurrentDb Set prst = pdbs.OpenRecordset("tblTest", dbOpenDynaset) prst.MoveLast prst.MoveFirst '現在のレコード番号を 1 に設定 plngRecNum = 1 '現在のレコード番号から10件分を画面に表示 Show10Data End Sub Private Sub Form_Unload(Cancel As Integer) prst.Close pdbs.Close End Sub Private Sub cmdPrev10_Click() '前の10レコードを表示 If plngRecNum - pcintRecPerPage >= 1 Then plngRecNum = plngRecNum - pcintRecPerPage Show10Data Else Beep End If End Sub Private Sub cmdNext10_Click() '次の10レコードを表示 If plngRecNum + pcintRecPerPage <= prst.RecordCount Then plngRecNum = plngRecNum + pcintRecPerPage Show10Data Else Beep End If End Sub Private Sub Show10Data() '現在のレコード番号から10件分を画面に表示 Dim strTxtData As String Dim iintLoop As Integer On Error GoTo Err_Show10Data '現在のレコード番号に Recotdset を移動 prst.AbsolutePosition = plngRecNum - 1 '10件分のデータを組み立て strTxtData = "" For iintLoop = 1 To pcintRecPerPage strTxtData = strTxtData & prst!Data & vbCrLf prst.MoveNext Next iintLoop SetTextBox: '組み立てられたテキストをフォームのテキストボックスにセット Me!txtData = strTxtData Exit_Show10Data: Exit Sub Err_Show10Data: If Err.Number = 3021 Then Resume SetTextBox: Else Resume Exit_Show10Data: End If End Sub |
|||
|
Copyright © T'sWare All rights reserved |