Rolagem relativa e absoluta

A maioria das opções de scroll no SQLFetchScroll posiciona o cursor em relação à posição atual ou a uma posição absoluta. O SQLFetchScroll suporta a obtenção dos próximos, anteriores, primeiros e últimos conjuntos de linhas, bem como busca relativa (buscar o conjunto de linhas n a partir do início do conjunto atual) e busca absoluta (buscar o conjunto de linhas a partir da linha n). Se n for negativo numa busca absoluta, as linhas são contadas a partir do final do conjunto de resultados. Assim, uma busca absoluta da linha -1 significa buscar o conjunto de linhas que começa com a última linha do conjunto de resultados.

Os cursores dinâmicos detetam linhas inseridas e eliminadas do conjunto de resultados, pelo que não há uma forma fácil de os cursores dinâmicos recuperarem a linha num número específico, exceto lendo a partir do início do conjunto de resultados, o que provavelmente será lento. Além disso, a busca absoluta não é muito útil em cursores dinâmicos porque os números das linhas mudam à medida que as linhas são inseridas e eliminadas; portanto, buscar sucessivamente o mesmo número de linhas pode gerar linhas diferentes.

Aplicações que utilizam SQLFetchScroll apenas para as capacidades de cursor de bloco, como relatórios, tendem a passar pelo conjunto de resultados uma única vez, usando apenas a opção de obter o próximo conjunto de linhas. As aplicações baseadas em ecrã, por outro lado, podem tirar partido de todas as capacidades do SQLFetchScroll. Se a aplicação definir o tamanho do conjunto de linhas para o número de linhas exibidas no ecrã e associar os buffers de ecrã ao conjunto de resultados, pode traduzir as operações da barra de scroll diretamente para chamadas ao SQLFetchScroll.

Funcionamento da barra de deslocamento Opção de deslocamento SQLFetchScroll
Subir página SQL_FETCH_PRIOR
Descer página SQL_FETCH_NEXT
Alinhar SQL_FETCH_RELATIVE com FetchOffset igual a -1
Linha abaixo SQL_FETCH_RELATIVE com FetchOffset igual a 1
Caixa de rolagem no topo SQL_FETCH_FIRST
Barra de rolagem na parte inferior SQL_FETCH_LAST
Posição aleatória da área de rolagem SQL_FETCH_ABSOLUTE

Estas aplicações também precisam de posicionar a caixa de rolagem após uma operação de deslocamento, o que requer o número da linha atual e o número total de linhas. Para o número de linha atual, as aplicações podem acompanhar o número de linha atual ou chamar SQLGetStmtAttr com o atributo SQL_ATTR_ROW_NUMBER para o recuperar.

O número de linhas no cursor, que é o tamanho do conjunto de resultados, está disponível como o campo SQL_DIAG_CURSOR_ROW_COUNT do cabeçalho de diagnóstico. O valor neste campo é definido apenas depois de SQLExecute, SQLExecDirect ou SQLMoreResult ter sido chamado. Esta contagem pode ser aproximada ou exata, dependendo das capacidades do condutor. O suporte do driver pode ser determinado ao chamar SQLGetInfo com os tipos de informação dos atributos do cursor e ao verificar se o bit SQL_CA2_CRC_APPROXIMATE ou SQL_CA2_CRC_EXACT é retornado para o tipo de cursor.

Nunca é suportada uma contagem exata de linhas para um cursor dinâmico. Para outros tipos de cursores, o driver pode suportar contagens exatas ou aproximadas de linhas, mas não ambas. Se o driver não suportar nem contagens exatas nem aproximadas de linhas para um tipo específico de cursor, o campo SQL_DIAG_CURSOR_ROW_COUNT contém o número de linhas que foram recolhidas até ao momento. Independentemente do que o driver suporta, o SQLFetchScroll com uma Operação de SQL_FETCH_LAST fará com que o campo SQL_DIAG_CURSOR_ROW_COUNT contenha a contagem exata de linhas.