Se déplacer dans un jeu d’enregistrements DAO

Un objet Recordset a généralement une position actuelle, le plus souvent au niveau d’un enregistrement. Lorsque vous faites référence aux champs d'un jeu d'enregistrements, vous obtenez des valeurs de l'enregistrement à la position actuelle, réputée comme l'enregistrement actuel. Cependant, la position actuelle peut également se situer juste avant le premier enregistrement d'un jeu d'enregistrements ou juste après le dernier enregistrement. Dans certaines circonstances, la position actuelle n'est pas définie.

Utilisez les méthodes Move suivantes pour parcourir les enregistrements dans un recordset :

  • La méthode MoveFirst se déplace vers le premier enregistrement.

  • La méthode MoveLast se déplace vers le dernier enregistrement.

  • La méthode MoveNext passe à l’enregistrement suivant.

  • La méthode MovePrevious passe à l’enregistrement précédent.

  • La méthode Move avance ou recule le nombre d’enregistrements que vous spécifiez dans sa syntaxe.

Utilisez chacune de ces méthodes sur les objets Recordset de type table, dynaset-type et snapshot-type. Pour un objet Recordset de type Avant uniquement, vous pouvez seulement utiliser les méthodes MoveNext et Move. Si vous utilisez la méthode Move sur un objet Recordset de type Avant uniquement, l'argument qui spécifie le nombre de lignes doit être un nombre entier positif.

L’exemple de code suivant ouvre un objet Recordset dans la table Employés qui contient tous les enregistrements ayant une valeur Null dans le champ SupHiérarchique. La fonction met ensuite à jour les enregistrements pour indiquer que ces employés sont des intérimaires. Pour chaque enregistrement du jeu d'enregistrements, l'exemple modifie les champs Titre et Notes et enregistre les modifications à l'aide de la méthode Update. Il utilise la méthode MoveNext pour passer à l'enregistrement suivant.

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

Remarque

L’exemple ci-dessus a uniquement pour but d’illustrer les méthodes Update et MoveNext. Pour bénéficier de performances optimales, nous vous conseillons d’effectuer cette opération en bloc avec une requête SQL UPDATE.

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.