Partilhar via


Cursores ODBC

Uma aplicação recolhe dados com um cursor. Um cursor é diferente de um conjunto de resultados: um conjunto de resultados é o conjunto de linhas que corresponde a determinados critérios de pesquisa, enquanto um cursor é o software que devolve essas linhas à aplicação. O nome cursor, aplicado a bases de dados, provavelmente originou-se do cursor a piscar num terminal de computador. Tal como esse cursor indica a posição atual no ecrã e onde as palavras digitadas aparecerão a seguir, um cursor num conjunto de resultados indica a posição atual no conjunto de resultados e que linha será retornada a seguir.

O modelo de cursor em ODBC baseia-se no modelo de cursor em SQL embebido. Uma diferença notável entre estes modelos é a forma como os cursores são abertos. Em SQL embutido, um cursor deve ser explicitamente declarado e aberto antes de poder ser usado. No ODBC, um cursor é implicitamente aberto quando uma instrução que cria um conjunto de resultados é executada. Quando o cursor é aberto, é posicionado antes da primeira linha do conjunto de resultados. Tanto em SQL embutido como em ODBC, um cursor deve ser fechado depois de a aplicação terminar de o utilizar.

Cursores diferentes têm características diferentes. O tipo mais comum de cursor, chamado cursor apenas para a frente, só pode avançar através do conjunto de resultados. Para regressar a uma linha anterior, a aplicação deve fechar e reabrir o cursor e depois ler as linhas desde o início do conjunto de resultados até chegar à linha necessária. Os cursores apenas para avançar fornecem um mecanismo rápido para fazer uma única passagem por um conjunto de resultados.

Os cursores apenas para avançar são menos úteis para aplicações baseadas em ecrã, nas quais o utilizador percorre os dados para trás e para a frente. Estas aplicações podem usar um cursor apenas para frente, lendo o conjunto de resultados uma vez, armazenando os dados em cache localmente e realizando o scroll elas próprias. No entanto, isto só funciona bem com pequenas quantidades de dados. Uma solução melhor é usar um cursor rolável, que fornece acesso aleatório ao conjunto de resultados. Estas aplicações também podem aumentar o desempenho ao recolher mais do que uma linha de dados de cada vez, usando o que se chama um cursor de blocos. Para mais informações sobre cursores de bloco, veja Utilização de Cursores de Bloco.

O cursor apenas para frente é o tipo de cursor padrão em ODBC e é discutido nas secções seguintes. Para mais informações sobre cursores de bloco e cursores roláveis, veja Cursores de Bloco e Cursores Roláveis.

Importante

Comprometer ou reverter uma transação, seja chamando explicitamente SQLEndTran ou operando no modo de auto-commit, faz com que algumas origens de dados fechem todos os cursores de todas as instruções numa ligação. Para mais informações, consulte os atributos SQL_CURSOR_COMMIT_BEHAVIOR e SQL_CURSOR_ROLLBACK_BEHAVIOR na descrição da função SQLGetInfo .