Scorrimento relativo e assoluto
La maggior parte delle opzioni di scorrimento in SQLFetchScroll posiziona il cursore rispetto alla posizione corrente o a una posizione assoluta. SQLFetchScroll supporta il recupero dei set di righe successivi, precedenti, primi e ultimi, nonché il recupero relativo (recuperare il set di righe di n righe dall'inizio del set di righe corrente) e il recupero assoluto (recuperare il set di righe dall'inizio della riga n). Se n è negativo in un recupero assoluto, le righe vengono conteggiate dalla fine del set di risultati. Quindi, un recupero assoluto della riga -1 indica il recupero del set di righe che inizia con l'ultima riga nel set di risultati.
I cursori dinamici rilevano le righe inserite in ed eliminate dal set di risultati, quindi non è possibile riprendere facilmente le righe in un determinato numero diverso dalla lettura dall'inizio del set di risultati, che probabilmente è lento. Inoltre, il recupero assoluto non è molto utile nei cursori dinamici perché i numeri di riga cambiano man mano che le righe vengono inserite ed eliminate; pertanto, il recupero successivo dello stesso numero di riga può determinare righe diverse.
È probabile che le applicazioni che usano SQLFetchScroll solo per le sue capacità di cursore rettangolare, ad esempio i report, passino attraverso il set di risultati una singola volta, usando solo l'opzione per recuperare il set di righe successivo. Le applicazioni basate su schermo, d'altra parte, possono sfruttare tutte le capacità di SQLFetchScroll. Se l'applicazione imposta le dimensioni del set di righe sul numero di righe visualizzate sullo schermo e associa i buffer dello schermo al set di risultati, è possibile convertire le operazioni della barra di scorrimento direttamente in chiamate a SQLFetchScroll.
Operazione della barra di scorrimento | Opzione di scorrimento SQLFetchScroll |
---|---|
Su di una pagina | SQL_FETCH_PRIOR |
Giù di una pagina | SQL_FETCH_NEXT |
Su di una riga | SQL_FETCH_RELATIVE con FetchOffset uguale a -1 |
Giù di una riga | SQL_FETCH_RELATIVE con FetchOffset uguale a 1 |
Casella di scorrimento all'inizio | SQL_FETCH_FIRST |
Casella di scorrimento alla fine | SQL_FETCH_LAST |
Posizione casuale della casella di scorrimento | SQL_FETCH_ABSOLUTE |
Tali applicazioni devono anche posizionare la casella di scorrimento dopo un'operazione di scorrimento, il che richiede il numero di riga corrente e il numero di righe. Per il numero di riga corrente, le applicazioni possono tenere traccia del numero di riga corrente o chiamare SQLGetStmtAttr con l'attributo SQL_ATTR_ROW_NUMBER per riprenderlo.
Il numero di righe nel cursore, ossia la dimensione del set di risultati, è disponibile come campo SQL_DIAG_CURSOR_ROW_COUNT dell'intestazione di diagnostica. Il valore in questo campo viene definito solo dopo che è avvenuta la chiamata di SQLExecute, SQLExecDirect o SQLMoreResult. Questo conteggio può essere un conteggio approssimativo o un conteggio esatto, a seconda delle capacità del driver. Il supporto del driver può essere determinato effettuando una chiamata a SQLGetInfo con i tipi di informazioni sugli attributi del cursore e verificando se viene restituito il bit SQL_CA2_CRC_APPROXIMATE o SQL_CA2_CRC_EXACT per il tipo di cursore.
Il conteggio esatto delle righe non è mai supportato per un cursore dinamico. Per altri tipi di cursori, il driver può supportare conteggi di righe esatti o approssimativi, ma non entrambi i tipi. Se il driver non supporta conteggi di righe esatti né approssimativi per un tipo di cursore specifico, il campo SQL_DIAG_CURSOR_ROW_COUNT contiene il numero di righe recuperate finora. Indipendentemente dal supporto del driver, SQLFetchScroll con un'operazione di SQL_FETCH_LAST farà in modo che il campo SQL_DIAG_CURSOR_ROW_COUNT contenga il conteggio esatto delle righe.