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
Notes
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.
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.