Partage via


Défilement relatif et absolu

La plupart des options de défilement dans SQLFetchScroll positionnent le curseur par rapport à la position actuelle ou à une position absolue. SQLFetchScroll prend en charge la récupération des ensembles de lignes suivants, précédents, premiers et derniers, ainsi que la récupération relative (récupérer l’ensemble de lignes n lignes à partir du début de l’ensemble de lignes actuel) et la récupération absolue (récupérer l’ensemble de lignes commençant à la ligne n). Si n est négatif dans une extraction absolue, les lignes sont comptées à partir de la fin du jeu de résultats. Ainsi, une extraction absolue de ligne -1 signifie récupérer l’ensemble de lignes qui commence par la dernière ligne du jeu de résultats.

Les curseurs dynamiques détectent les lignes insérées dans et supprimées du jeu de résultats, de sorte qu’il n’existe aucun moyen simple pour les curseurs dynamiques de récupérer la ligne à un nombre particulier autre que la lecture au début du jeu de résultats, ce qui est susceptible d’être lent. En outre, l’extraction absolue n’est pas très utile dans les curseurs dynamiques, car les numéros de ligne changent à mesure que les lignes sont insérées et supprimées ; par conséquent, l’extraction successive du même nombre de lignes peut générer des lignes différentes.

Les applications qui utilisent SQLFetchScroll uniquement pour ses fonctionnalités de curseur de bloc, telles que les rapports, sont susceptibles de passer par le jeu de résultats une seule fois, en utilisant uniquement l’option permettant d’extraire l’ensemble de lignes suivant. Les applications basées sur l’écran, d’autre part, peuvent tirer parti de toutes les fonctionnalités de SQLFetchScroll. Si l’application définit la taille de l’ensemble de lignes au nombre de lignes affichées à l’écran et lie les mémoires tampons d’écran au jeu de résultats, elle peut traduire les opérations de la barre de défilement directement en appels à SQLFetchScroll.

Opération de barre de défilement Option de défilement SQLFetchScroll
Page précédente SQL_FETCH_PRIOR
Page suivante SQL_FETCH_NEXT
Mettre en ligne SQL_FETCH_RELATIVE avec FetchOffset égal à -1
Ligne vers le bas SQL_FETCH_RELATIVE avec FetchOffset égal à 1
Zone de défilement en haut SQL_FETCH_FIRST
Zone de défilement en bas SQL_FETCH_LAST
Position de la zone de défilement aléatoire SQL_FETCH_ABSOLUTE

Ces applications doivent également positionner la zone de défilement après une opération de défilement, ce qui nécessite le numéro de ligne actuel et le nombre de lignes. Pour le numéro de ligne actuel, les applications peuvent effectuer le suivi du numéro de ligne actuel ou appeler SQLGetStmtAttr avec l’attribut SQL_ATTR_ROW_NUMBER pour le récupérer.

Le nombre de lignes du curseur, qui est la taille du jeu de résultats, est disponible en tant que champ SQL_DIAG_CURSOR_ROW_COUNT de l’en-tête de diagnostic. La valeur de ce champ est définie uniquement après l’appel de SQLExecute, SQLExecDirect ou SQLMoreResult . Ce nombre peut être un nombre approximatif ou un nombre exact, en fonction des fonctionnalités du pilote. La prise en charge du pilote peut être déterminée en appelant SQLGetInfo avec les types d'informations concernant les attributs du curseur et en vérifiant si le bit SQL_CA2_CRC_APPROXIMATE ou SQL_CA2_CRC_EXACT est retourné pour le type de curseur.

Le comptage exact des lignes n'est jamais supporté pour un curseur dynamique. Pour d’autres types de curseurs, le pilote peut prendre en charge les nombres de lignes exactes ou approximatives, mais pas simultanément les deux. Si le pilote ne prend pas en charge les nombres de lignes exacts ou approximatifs pour un type de curseur spécifique, le champ SQL_DIAG_CURSOR_ROW_COUNT contient le nombre de lignes extraites jusqu’à présent. Quel que soit le support du pilote, SQLFetchScroll avec une opération de SQL_FETCH_LAST fera en sorte que le champ SQL_DIAG_CURSOR_ROW_COUNT contienne le nombre exact de lignes.