Desplazarse por un objeto Recordset de DAO

Un objeto Recordset suele tener una posición actual, con frecuencia en un registro. Al hacer referencia a los campos de un objeto Recordset, obtiene los valores del registro en la posición actual, lo que se conoce como el registro actual. Pero la posición actual también puede estar inmediatamente antes del primer registro en un objeto Recordset o inmediatamente después del último registro. En algunas circunstancias, la posición actual no se define.

Puede usar los siguientes métodos Move para recorrer en bucle los registros de un objeto Recordset:

  • El método MoveFirst se desplaza al primer registro.

  • El método MoveLast se desplaza al último registro.

  • El método MoveNext se desplaza al registro siguiente.

  • El método MovePrevious se desplaza al registro anterior.

  • El método Move se desplaza hacia delante o atrás el número de registros especificados en su sintaxis.

Puede usar todos estos métodos en objetos Recordset de tipo tabla, de tipo conjunto de registros dinámicos y de tipo instantánea. En un objeto Recordset del tipo solo avance, únicamente pueden usarse los métodos MoveNext y Move. Si usa el método Move en un objeto Recordset del tipo solo avance, el argumento que especifica el número de filas que se moverán tiene que ser un entero positivo.

En el siguiente ejemplo de código, se abre un objeto Recordset en la tabla “Employees” (Empleados) que contiene todos los registros con un valor NULL en el campo “ReportsTo” (subordinado de). Después, la función actualiza los registros para indicar que estos empleados son temporales. Por cada registro en el objeto Recordset, el ejemplo cambia los campos “Title” (Título) y “Notes” (Notas) y guarda los cambios con el método Update. Usa el método MoveNext para moverse al registro siguiente.

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

Nota

El ejemplo anterior se proporciona únicamente como demostración de los métodos Update y MoveNext. Para obtener un rendimiento óptimo, le recomendamos que realice esta operación masiva con una consulta de actualización SQL.

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.