Partager via


D'autres manières de naviguer dans un jeu d'enregistrements

Les quatre méthodes suivantes permettent de se déplacer ou de faire défiler l’ensemble d’enregistrements : MoveFirst, MoveLast, MoveNext et MovePrevious. (Certaines de ces méthodes ne sont pas disponibles sur les curseurs avant uniquement.)

MoveFirst remplace la position d’enregistrement actuelle par le premier enregistrement du jeu d’enregistrements . MoveLast remplace la position d’enregistrement actuelle par le dernier enregistrement du jeu d’enregistrements . Pour utiliser MoveFirst ou MoveLast, l’objet recordset de doit prendre en charge les signets ou le mouvement du curseur vers l’arrière ; sinon, l’appel de méthode génère une erreur.

MoveNext déplace la position d’enregistrement actuelle d'une position vers l'avant. Si vous êtes sur le dernier enregistrement lorsque vous appelez MoveNext, EOF est défini sur True. MovePrevious déplace la position d’enregistrement actuelle d’un emplacement vers l’arrière. Si vous êtes sur le premier enregistrement lorsque vous appelez MovePrevious, BOF est défini sur True. Il est judicieux de vérifier les propriétés EOF et BOF lors de l’utilisation de ces méthodes et de déplacer le curseur vers une position d’enregistrement actuelle valide si vous quittez l'Recordset, comme illustré ici :

. . .  
oRs.MoveNext  
If oRs.EOF Then oRs.MoveLast  
. . .   

Ou, dans le cas de la méthode MovePrevious :

. . .   
oRs.MovePrevious  
If oRs.BOF Then oRs.MoveFirst  
. . .  

Dans les cas où le jeu d'enregistrements a été filtré ou trié et que les données de l'enregistrement actuel sont modifiées, la position peut également changer. Dans ce cas, la méthode MoveNext fonctionne normalement, mais sachez que la position est déplacée d’un enregistrement à partir de la nouvelle position, et non de l’ancienne position. Par exemple, modifier les données dans l'enregistrement actif de manière à ce qu'il soit déplacé à la fin du jeu d'enregistrements trié signifie que lorsque MoveNext est appelé, ADO place l'enregistrement actif à la position après le dernier enregistrement du jeu d'enregistrements (EOF = True).

Le comportement des différentes méthodes Move de l’objet Recordset dépend, dans une certaine mesure, des données au sein du Recordset . Les nouveaux enregistrements ajoutés au jeu d’enregistrements sont initialement ajoutés dans un ordre particulier, qui est défini par la source de données et peut dépendre implicitement ou explicitement des données du nouvel enregistrement. Par exemple, si un tri ou une jointure est effectué dans la requête qui remplit le Recordset, le nouvel enregistrement est inséré à l’emplacement approprié dans le jeu d’enregistrements . Si l’ordre n’est pas spécifié explicitement lors de la création du jeu d’enregistrements , les modifications apportées à l’implémentation de la source de données peuvent entraîner la modification par inadvertance des lignes retournées. En outre, les fonctions de tri, de filtrage et de modification du jeu d’enregistrements peuvent affecter l’ordre et éventuellement les lignes du jeu d’enregistrements qui seront visibles.

Par conséquent, MoveNext, MovePrevious, MoveFirst, MoveLastet Move sont tous sensibles aux autres opérations effectuées sur le même jeu d’enregistrements . ADO essaiera toujours de maintenir votre position actuelle jusqu’à ce que vous le déplacez explicitement, mais parfois, les modifications intermédiaires rendent difficile la compréhension des effets d’un déplacement ultérieur. Par exemple, si vous appelez MoveFirst pour vous positionner sur la première ligne d’un jeu d’enregistrements trié et que vous modifiez le tri de l’ordre croissant vers l’ordre décroissant, vous restez sur la même ligne, mais elle est maintenant la dernière ligne du jeu d’enregistrements . MoveFirst vous amènera à une ligne différente (la nouvelle première ligne).

Comme autre exemple, si vous êtes positionné sur une ligne d'enregistrement particulière au milieu d’un jeu d’enregistrements et que vous appelez Supprimer, puis MoveNext, vous vous trouvez maintenant sur l’enregistrement directement suivant l’enregistrement supprimé. Mais l’appel MovePrevious rend l’enregistrement précédent celui que vous avez supprimé, car l’enregistrement supprimé n’est plus comptabilisé dans l’appartenance active du jeu d’enregistrements .

Il est particulièrement difficile de définir une sémantique de déplacement cohérente entre tous les fournisseurs pour les méthodes qui se déplacent par rapport à l’enregistrement actif - MovePrevious, MoveNextet Move - face à la modification des données dans l’enregistrement actif. Par exemple, si vous travaillez avec un jeu d’enregistrements trié, filtré , et que vous modifiez les données dans l’enregistrement actif afin qu’elles précèdent tous les autres enregistrements, mais que vos données modifiées ne correspondent plus au filtre, il n’est pas clair où une opération MoveNext doit vous prendre. La conclusion la plus sûre est que le déplacement relatif dans un jeu d’enregistrements est plus risqué que le déplacement absolu (par exemple, l’utilisation de MoveFirst ou MoveLast) lorsque les données changent pendant que les enregistrements sont modifiés, ajoutés ou supprimés. Le tri et le filtrage doivent être basés sur une clé primaire ou un ID, car ce type de valeur ne doit pas changer.