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 l’extraction des ensembles de lignes suivants, précédents, précédents et précédents, ainsi que la récupération relative (extraire l’ensemble de lignes n lignes à partir du début de l’ensemble de lignes actuel) et l’extraction 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. Par conséquent, une extraction absolue de la 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 sur le 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 barre de défilement directement aux 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 |
Ligne précédente | SQL_FETCH_RELATIVE avec FetchOffset égal à -1 |
Ligne suivante | 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 aléatoire de la case de défilement | 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_NUMo ER 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 d’attributs de curseur et en case activée indiquant si le bit SQL_CA2_CRC_APPROXIMATE ou SQL_CA2_CRC_EXACT est retourné pour le type de curseur.
Un nombre de lignes exact n’est jamais pris en charge 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 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. Quelle que soit la prise en charge par le pilote, SQLFetchScroll avec une opération de SQL_FETCH_LAST entraîne le SQL_DIAG_CURSOR_ROW_COUNT champ contenant le nombre de lignes exact.