適用先: Access 2013、Office 2013
Recordset オブジェクトのカレント レコードの相対的なレコード番号を設定または取得します。
構文
式 .AbsolutePosition
式Recordset オブジェクトを表す変数。
注釈
AbsolutePosition プロパティを使用すると、ダイナセット タイプまたはスナップショット タイプの Recordset オブジェクト内における順序位置に基づいて、カレント レコードを参照するポインターを特定のレコードに移動できます。 また、 AbsolutePosition プロパティの設定値を調べると、カレント レコードのレコード番号を特定できます。
AbsolutePosition プロパティの値は 0 から始まるため (つまり、0 の設定は Recordset オブジェクトの最初のレコードを参照します)、設定されたレコードの数以上の値に設定することはできません。これにより、トラップ可能なエラーが発生します。 RecordCount プロパティの設定を確認することで、Recordset オブジェクトに設定されたレコードの数を決定できます。 AbsolutePosition プロパティの最大許容設定は、RecordCount プロパティの値から 1 を引いた値です。
Recordset オブジェクトにレコードが格納されていないなどの理由で、カレント レコードが存在しない場合、AbsolutePosition プロパティに -1 が取得されます。 カレント レコードを削除した場合、AbsolutePosition プロパティに値が定義されていないため、そのレコードを参照するとトラップ可能なエラーが発生します。 新しいレコードは、レコード順序の末尾に追加されます。
このプロパティをレコード番号の代わりに使用しないでください。 ブックマークが、特定の位置を保持してその位置に戻るための推奨手段であり、すべての種類の Recordset オブジェクトでカレント レコードの位置を指定する唯一の手段です。 特に、レコードの位置は、それより前にある 1 つ以上のレコードを削除すると変わります。 また、SQL ステートメントで ORDER BY 句を使用して Recordset オブジェクトを作成した場合を除き、そのオブジェクト内の各レコードの順序は保証されないため、 Recordset オブジェクトを再作成すると、同じレコードの絶対的な位置が以前と同じになる保証はありません。
注:
- [!メモ] 新たに開いた後でまだレコードを格納していない Recordset オブジェクトの AbsolutePosition プロパティを 0 より大きい値に設定すると、トラップ可能なエラーが発生します。 MoveLast メソッドを使用して、まず Recordset オブジェクトに値を設定してください。
- 前方スクロール タイプの Recordset オブジェクト、または Microsoft Access データベース エンジンに接続された ODBC データベースに対して実行したパススルー クエリによって開いた Recordset オブジェクトでは、AbsolutePosition プロパティを使用できません。
例
この例では、AbsolutePosition プロパティを使用して、Recordset オブジェクトのすべてのレコードを列挙するループ処理の進捗を追跡します。
Sub AbsolutePositionX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
' AbsolutePosition only works with dynasets or snapshots.
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Employees", _
dbOpenSnapshot)
With rstEmployees
' Populate Recordset.
.MoveLast
.MoveFirst
' Enumerate Recordset.
Do While Not .EOF
' Display current record information. Add 1 to
' AbsolutePosition value because it is zero-based.
strMessage = "Employee: " & !LastName & vbCr & _
"(record " & (.AbsolutePosition + 1) & _
" of " & .RecordCount & ")"
If MsgBox(strMessage, vbOKCancel) = vbCancel _
Then Exit Do
.MoveNext
Loop
.Close
End With
dbsNorthwind.Close
End Sub