Definir opções de cursor (ODBC)

Para definir opções de cursor, chame SQLSetStmtAttr para definir ou SQLGetStmtAttr para obter as opções de instrução que controlam o comportamento do cursor.

Atributo Especifica
SQL_ATTR_CURSOR_TYPE Tipo de cursor de somente encaminhamento, estático, dinâmico ou controlado por conjunto de chaves
SQL_ATTR_CONCURRENCY Opção de controle de simultaneidade de somente leitura, bloqueio, otimista usando carimbos de data/hora ou otimista usando valores
SQL_ATTR_ROW_ARRAY_SIZE Número de linhas recuperadas em cada busca
SQL_ATTR_CURSOR_SENSITIVITY Cursor que não mostra ou não atualizações para linhas de cursor feitas por outras conexões
SQL_ATTR_CURSOR_SCROLLABLE Cursor que pode ser rolado para frente e para trás

Os valores padrão para esses atributos (somente encaminhamento, somente leitura, tamanho do conjunto de linhas de 1) não usam cursores de servidor. Para usar cursores de servidor, pelo menos um desses atributos deve ser definido como um valor diferente do padrão, e a instrução que está sendo executada deve ser uma única instrução SELECT ou um procedimento armazenado que contenha uma única instrução SELECT. Ao usar cursores de servidor, as instruções SELECT não podem usar cláusulas sem suporte por cursores de servidor: COMPUTE, COMPUTE BY, FOR BROWSE e INTO.

Você pode controlar o tipo de cursor usado definindo SQL_ATTR_CURSOR_TYPE e SQL_ATTR_CONCURRENCY ou definindo SQL_ATTR_CURSOR_SENSITIVITY e SQL_ATTR_CURSOR_SCROLLABLE. Você não deve misturar os dois métodos de especificação do comportamento do cursor.

Exemplo

O exemplo a seguir aloca um identificador de instrução, define um tipo de cursor dinâmico com simultaneidade otimista de controle de versão de linha e executa um SELECT.

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER);  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, SQL_IS_INTEGER);  
retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);  

Exemplo

O exemplo a seguir aloca um identificador de instrução, define um cursor rolável e confidencial e executa um SELECT

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);  
  
// Set the cursor options and execute the statement.  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER)SQL_SCROLLABLE, SQL_IS_INTEGER);  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, SQL_IS_INTEGER);  
retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);  

Consulte Também

Executando tópicos de instruções de consultas (ODBC)