DAO レコードセット内を移動する

Recordset オブジェクトは通常、現在の位置を持ち、ほとんどの場合はレコードにあります。 Recordset 内のフィールドを参照するとき、カレント レコードと呼ばれる現在位置のレコードから値を取得します。 ただし、現在位置が Recordset 内の先頭レコードの直前であったり、最終レコードの直後であったりする場合もあります。 現在位置が未定義となる特殊な状況もあります。

次の Move メソッドを使用して、 Recordset 内のレコードをループします。

  • MoveFirst メソッドは先頭レコードに移動します。

  • MoveLast メソッドは最終レコードに移動します。

  • MoveNext メソッドは次のレコードに移動します。

  • MovePrevious メソッドは 1 つ前のレコードに移動します。

  • Move メソッドは、構文で指定されたレコード数だけ前方または後方に移動します。

テーブルタイプ、ダイナセットタイプ、スナップショットタイプの Recordset オブジェクトでは、これらの各メソッドを使用します。 前方カーソル タイプの Recordset オブジェクトに対しては、MoveNext メソッドと Move メソッドだけを使用できます。 前方カーソル タイプの Recordset に対して Moveメソッドを使用する場合、移動する行数を指定する引数は正の整数である必要があります。

次のコード例では、ReportsTo フィールドに Null 値を持つすべてのレコードを含む Employees テーブルの Recordset オブジェクトを開きます。 関数ではその後、これらの社員が臨時社員であることを示すためにレコードを更新します。 Recordset の各レコードについて、例では [タイトル] フィールドと [メモ] フィールドを変更し、Update メソッドを使用して変更を保存します。 MoveNext メソッドを使って次のレコードに移動します。

Sub UpdateEmployees() 
 
Dim dbsNorthwind As DAO.Database 
Dim rstEmployees As DAO.Recordset 
Dim strSQL As String 
Dim intI As Integer 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
 
   ' Open a recordset on all records from the Employees table that have 
   ' a Null value in the ReportsTo field. 
   strSQL = "SELECT * FROM Employees WHERE ReportsTo IS NULL" 
   Set rstEmployees = dbsNorthwind.OpenRecordset(strSQL, dbOpenDynaset) 
 
   ' If the recordset is empty, exit. 
   If rstEmployees.EOF Then Exit Sub 
 
   intI = 1 
   With rstEmployees 
      Do Until .EOF 
         .Edit 
         ![ReportsTo] = 5 
         ![Title] = "Temporary" 
         ![Notes] = rstEmployees![Notes] & "Temp #" & intI 
         .Update 
         .MoveNext 
         intI = intI + 1 
      Loop 
   End With 
 
   RstEmployees.Close 
   dbsNorthwind.Close 
 
   Set rstEmployees = Nothing 
   Set dbsNorthwind = Nothing 
 
   Exit Sub 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Sub

注:

[!メモ] この例の目的は単に、 Update メソッドと MoveNext メソッドの使用方法を示すことです。 最適なパフォーマンスを得るには、SQL UPDATE クエリを使用してこの一括操作を実行することをお勧めします。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。