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