Recordset.AbsolutePosition プロパティ (DAO)

適用先: 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