Compartilhar via


Rolagem relativa e absoluta

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

Cursores dinâmicos detectam linhas inseridas e excluídas do conjunto de resultados, portanto, não há uma maneira fácil de os cursores dinâmicos recuperarem a linha em um número específico diferente da leitura 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 de linha são alterados à medida que as linhas são inseridas e excluídas; portanto, buscar sucessivamente o mesmo número de linha pode produzir linhas diferentes.

Aplicativos que usam SQLFetchScroll apenas para seus recursos de cursor de bloco, como relatórios, provavelmente passarão pelo conjunto de resultados uma única vez, usando apenas a opção para buscar o próximo conjunto de linhas. Os aplicativos baseados em tela, por outro lado, podem aproveitar todos os recursos do SQLFetchScroll. Se o aplicativo definir o tamanho do conjunto de linhas como o número de linhas exibidas na tela e associar os buffers de tela ao conjunto de resultados, ele poderá converter operações de barra de rolagem diretamente em chamadas para SQLFetchScroll.

Operação de barra de rolagem Opção de rolagem SQLFetchScroll
Uma página acima SQL_FETCH_PRIOR
Uma página abaixo SQL_FETCH_NEXT
Alinhar SQL_FETCH_RELATIVE com FetchOffset igual a -1
Linha para baixo SQL_FETCH_RELATIVE com FetchOffset igual a 1
Caixa de rolagem na parte superior SQL_FETCH_FIRST
Caixa de rolagem na parte inferior SQL_FETCH_LAST
Posição aleatória da caixa de scroll SQL_FETCH_ABSOLUTE

Esses aplicativos também precisam posicionar a caixa de rolagem após uma operação de rolagem, o que requer o número da linha atual e o total de linhas. Para o número de linha atual, os aplicativos podem acompanhar o número da linha atual ou chamar SQLGetStmtAttr com o atributo SQL_ATTR_ROW_NUMBER para recuperá-lo.

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 nesse campo é definido somente depois que SQLExecute, SQLExecDirect ou SQLMoreResult tiver sido chamado. Essa contagem pode ser uma contagem aproximada ou uma contagem exata, dependendo dos recursos do driver. O suporte do driver pode ser determinado chamando SQLGetInfo com os tipos de informações de atributos de cursor e verificando se é retornado o bit SQL_CA2_CRC_APPROXIMATE ou SQL_CA2_CRC_EXACT para o tipo de cursor.

Nunca há suporte para uma contagem exata de linhas para um cursor dinâmico. Para outros tipos de cursores, o driver pode dar suporte a contagens de linhas exatas ou aproximadas, mas não ambas. Se o driver não der suporte a contagens de linhas exatas nem aproximadas para um tipo de cursor específico, o campo SQL_DIAG_CURSOR_ROW_COUNT conterá o número de linhas que foram buscadas até agora. Independentemente do suporte do driver, 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.