Percorrer um Conjunto de Registros de DAO

Um objeto conjunto de registros geralmente não tem uma posição atual, geralmente em um registro. Quando você se referir aos campos em um conjunto de registros, você obtém valores de registro na posição atual, conhecida como registro atual. No entanto, a posição atual também pode ser imediatamente antes do primeiro registro em um conjunto de registros ou imediatamente após o último registro. Em determinadas circunstâncias é indefinida a posição atual.

Use os seguintes métodos Mover para fazer loop através dos registros em um conjunto de registros:

  • O método MoveFirst move para o primeiro registro.

  • O método MoveLast move para o último registro.

  • O método MoveNext move para o próximo registro.

  • O método MovePrevious move para o registro anterior.

  • O método mover move avançar ou retroceder o número de registros que você especificar sua sintaxe.

Use cada um desses métodos em objetos Recordset de tipo de tabela, tipo dynaset e tipo de instantâneo. Em um apenas um tipo de encaminhamento, o objeto conjunto de registros, você pode usar apenas os métodos MoveNext e mover. Se você usar o método mover um encaminhamento apenas um tipo de forma conjunto de registros, o argumento que especifica o número de linhas para mover-se deve ser um positivo inteiro.

O seguinte código de exemplo será aberto um objeto conjunto de registros na tabela de funcionários que contém todos os registros com um valor nulo no campo Supervisor. A função, em seguida, atualiza os registros para indicar que esses funcionários são temporários. Para cada registro no conjunto de registros, o exemplo altera os campos título e anotações e salva as alterações com o método atualização. O método MoveNext move para o próximo registro.

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

Observação

O exemplo anterior é fornecido apenas para fins de ilustrar os métodos atualização e MoveNext. Para obter um desempenho ideal, é recomendável realizar essa operação em massa com uma consulta atualização SQL.

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.