Recordset2.AbsolutePosition プロパティ (DAO)

適用先: Access 2013、Office 2013

Recordset2 オブジェクトのカレント レコードの相対的なレコード番号を設定または取得します。

構文

.AbsolutePosition

Recordset2 オブジェクトを表す変数。

注釈

AbsolutePosition プロパティを使用すると、ダイナセット タイプまたはスナップショット タイプの Recordset2 オブジェクト内における順序位置に基づいて、カレント レコードを参照するポインターを特定のレコードに移動できます。 また、 AbsolutePosition プロパティの設定値を調べると、カレント レコードのレコード番号を特定できます。

AbsolutePosition プロパティの値は 0 から始まるため (つまり、0 の設定は Recordset2 オブジェクトの最初のレコードを参照します)、設定されたレコードの数以上の値に設定することはできません。これにより、トラップ可能なエラーが発生します。 RecordCount プロパティの設定を確認することで、Recordset2 オブジェクトに設定されたレコードの数を決定できます。 AbsolutePosition プロパティの最大許容設定は、RecordCount プロパティの値から 1 を引いた値です。

Recordset2 オブジェクトにレコードがない場合と同様に、現在のレコードがない場合、AbsolutePosition は –1 を返します。 カレント レコードを削除した場合、 AbsolutePosition プロパティに値が定義されていないため、そのレコードを参照するとトラップ可能なエラーが発生します。 新しいレコードは、レコード順序の末尾に追加されます。

このプロパティをレコード番号の代わりに使用しないでください。 ブックマークが、特定の位置を保持してその位置に戻るための推奨手段であり、すべての種類の Recordset2 オブジェクトでカレント レコードの位置を指定するための唯一の手段です。 特に、レコードの位置は、それより前にある 1 つ以上のレコードを削除すると変わります。 また、SQL ステートメントで ORDER BY 句を使用して Recordset オブジェクトを作成した場合を除き、そのオブジェクト内の各レコードの順序は保証されないため、 Recordset2 オブジェクトを再作成すると、同じレコードの絶対的な位置が以前と同じになる保証はありません。

注:

  • 新たに開いた後でまだレコードを格納していない Recordset2 オブジェクトの AbsolutePosition プロパティを 0 より大きい値に設定すると、トラップ可能なエラーが発生します。 MoveLast メソッドを使用して、まず Recordset2 オブジェクトに値を設定してください。
  • AbsolutePosition プロパティは、前方専用タイプの Recordset2 オブジェクト、または Microsoft Access データベース エンジンに接続された ODBC データベースに対するパススルー クエリから開かれた Recordset2 オブジェクトでは使用できません。

この例では、 AbsolutePosition プロパティを使用して、 Recordset2 オブジェクトのすべてのレコードを列挙するループ処理の進捗を追跡します。

    Sub AbsolutePositionX() 
     
       Dim dbsNorthwind As Database 
       Dim rstEmployees As Recordset2 
       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