Dela via


Relativ och absolut rullning

De flesta rullningsalternativen i SQLFetchScroll placerar markören i förhållande till den aktuella positionen eller till en absolut position. SQLFetchScroll stöder hämtning av nästa, tidigare, första och sista raduppsättningar, samt relativ hämtning (hämtar raduppsättningen n rader från början av den aktuella raduppsättningen) och absolut hämtning (hämta raduppsättningen från och med rad n). Om n är negativt i en absolut hämtning räknas rader från slutet av resultatuppsättningen. Därför innebär en absolut hämtning av rad -1 att hämta raduppsättningen som börjar med den sista raden i resultatuppsättningen.

Dynamiska markörer identifierar rader som infogats i och tagits bort från resultatuppsättningen, så det finns inget enkelt sätt för dynamiska markörer att hämta raden med ett annat tal än att läsa från början av resultatuppsättningen, vilket sannolikt kommer att vara långsamt. Dessutom är absolut hämtning inte särskilt användbart i dynamiska markörer eftersom radnummer ändras när rader infogas och tas bort. Därför kan hämtning av samma radnummer successivt ge olika rader.

Program som endast använder SQLFetchScroll för dess funktioner för blockmarkörer, till exempel rapporter, kommer sannolikt att passera genom resultatuppsättningen en enda gång, med bara alternativet för att hämta nästa raduppsättning. Skärmbaserade program kan däremot dra nytta av alla funktioner i SQLFetchScroll. Om programmet anger raduppsättningens storlek till antalet rader som visas på skärmen och binder skärmbuffertarna till resultatuppsättningen kan det översätta rullningsliståtgärder direkt till anrop till SQLFetchScroll.

Rullningsliståtgärd Rullningsalternativet SQLFetchScroll
Sida upp SQL_FETCH_PRIOR
Bläddra nedåt SQL_FETCH_NEXT
Rad upp SQL_FETCH_RELATIVE med FetchOffset lika med -1
Rad nedåt SQL_FETCH_RELATIVE med FetchOffset lika med 1
Rullningsruta överst SQL_FETCH_FIRST
Rullningsruta längst ned SQL_FETCH_LAST
Slumpmässig placering av rullningsruta SQL_FETCH_ABSOLUTE

Sådana program måste också placera rullningsrutan efter en rullningsåtgärd, vilket kräver det aktuella radnumret och antalet rader. För det aktuella radnumret kan program antingen hålla reda på det aktuella radnumret eller anropa SQLGetStmtAttr med attributet SQL_ATTR_ROW_NUMBER för att hämta det.

Antalet rader i markören, som är storleken på resultatuppsättningen, är tillgängligt som det SQL_DIAG_CURSOR_ROW_COUNT fältet i diagnostikrubriken. Värdet i det här fältet definieras endast efter att SQLExecute, SQLExecDirect eller SQLMoreResult har anropats. Det här antalet kan vara antingen ett ungefärligt antal eller ett exakt antal, beroende på drivrutins funktioner. Drivrutinsstöd kan fastställas genom att anropa SQLGetInfo med informationstyperna för markörens attribut och kontrollera om SQL_CA2_CRC_APPROXIMATE eller SQL_CA2_CRC_EXACT bit returneras för markörens typ.

Ett exakt antal rader stöds aldrig för en dynamisk markör. För andra typer av markörer kan drivrutinen antingen stödja exakta eller ungefärliga radantal, men inte båda. Om drivrutinen varken stöder exakta eller ungefärliga radantal för en viss markörtyp innehåller fältet SQL_DIAG_CURSOR_ROW_COUNT antalet rader som har hämtats hittills. Oavsett vad drivrutinen stöder kommer SQLFetchScroll med en åtgärd för SQL_FETCH_LAST att göra att fältet SQL_DIAG_CURSOR_ROW_COUNT innehåller det exakta radantalet.