Características e tipo do cursor

Um aplicativo pode especificar as características de um cursor em vez de especificar o tipo de cursor (somente avanço, estático, orientado por conjunto de teclas ou dinâmico). Para fazer isso, o aplicativo seleciona a rolabilidade do cursor (definindo o atributo de instrução SQL_ATTR_CURSOR_SCROLLABLE) e a sensibilidade (definindo o atributo de instrução SQL_ATTR_CURSOR_SENSITIVITY) antes de abrir o cursor no identificador de instrução. Em seguida, o driver escolhe o tipo de cursor que fornece com mais eficiência as características solicitadas pelo aplicativo.

Sempre que um aplicativo define qualquer um dos atributos de instrução SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_SCROLLABLE, SQL_ATTR_CURSOR_SENSITIVITY ou SQL_ATTR_CURSOR_TYPE, o driver faz qualquer alteração necessária nos outros atributos de instrução nesse conjunto de quatro atributos para que seus valores permaneçam consistentes. Como resultado, quando o aplicativo especifica uma característica de cursor, o driver pode alterar o atributo que indica o tipo de cursor com base nessa seleção implícita; quando o aplicativo especifica um tipo, o driver pode alterar qualquer um dos outros atributos para ser consistente com as características do tipo selecionado. Para obter mais informações sobre esses atributos de instrução, consulte a descrição da função SQLSetStmtAttr.

Um aplicativo que define atributos de instrução para especificar um tipo de cursor e características de cursor corre o risco de obter um cursor que não é o método mais eficiente disponível nesse driver para atender aos requisitos do aplicativo.

A configuração implícita de atributos de instrução é definida pelo driver, exceto que deve seguir estas regras:

  • Os cursores de somente avanço nunca são roláveis; consulte a definição de SQL_ATTR_CURSOR_SCROLLABLE em SQLSetStmtAttr.

  • Cursores insensíveis nunca são atualizáveis (e, portanto, sua simultaneidade é somente leitura); isso é baseado em sua definição de cursores insensíveis no padrão ISO SQL.

Consequentemente, a configuração implícita de atributos de instrução ocorre nos casos descritos na tabela a seguir.

O aplicativo define o atributo para Outros atributos definidos implicitamente
SQL_ATTR_CONCURRENCY para SQL_CONCUR_READ_ONLY SQL_ATTR_CURSOR_SENSITIVITY para SQL_INSENSITIVE.
SQL_ATTR_CONCURRENCY para SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER ou SQL_CONCUR_VALUES SQL_ATTR_CURSOR_SENSITIVITY para SQL_UNSPECIFIED ou SQL_SENSITIVE, conforme definido pelo driver. Ele nunca pode ser definido como SQL_INSENSITIVE, porque cursores insensíveis são sempre somente leitura.
SQL_ATTR_CURSOR_SCROLLABLE para SQL_NONSCROLLABLE SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_FORWARD_ONLY
SQL_ATTR_CURSOR_SCROLLABLE para SQL_SCROLLABLE SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN ou SQL_CURSOR_DYNAMIC, conforme especificado pelo driver. Nunca está definido para SQL_CURSOR_FORWARD_ONLY.
SQL_ATTR_CURSOR_SENSITIVITY para SQL_INSENSITIVE SQL_ATTR_CONCURRENCY para SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_STATIC.
SQL_ATTR_CURSOR_SENSITIVITY para SQL_SENSITIVE SQL_ATTR_CONCURRENCY para SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER ou SQL_CONCUR_VALUES, conforme especificado pelo driver. Nunca está definido para SQL_CONCUR_READ_ONLY.

SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN ou SQL_CURSOR_DYNAMIC, conforme especificado pelo driver.
SQL_ATTR_CURSOR_SENSITIVITY para SQL_UNSPECIFIED SQL_ATTR_CONCURRENCY para SQL_CONCUR_READ_ONLY, SQL_CONCUR_LOCK, SQL_CONCUR_ROWVER ou SQL_CONCUR_VALUES, conforme especificado pelo driver.

SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_FORWARD_ONLY, SQL_CURSOR_STATIC, SQL_CURSOR_KEYSET_DRIVEN ou SQL_CURSOR_DYNAMIC, conforme especificado pelo driver.
SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_DYNAMIC SQL_ATTR_SCROLLABLE para SQL_SCROLLABLE.

SQL_ATTR_CURSOR_SENSITIVITY para SQL_SENSITIVE. (Mas somente se SQL_ATTR_CONCURRENCY não for igual a SQL_CONCUR_READ_ONLY. Os cursores dinâmicos atualizáveis são sempre sensíveis às alterações feitas em sua própria transação.)
SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_FORWARD_ONLY SQL_ATTR_CURSOR_SCROLLABLE para SQL_NONSCROLLABLE.
SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_KEYSET_DRIVEN SQL_ATTR_SCROLLABLE para SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY a SQL_UNSPECIFIED ou SQL_SENSITIVE (de acordo com critérios definidos pelo condutor, se SQL_ATTR_CONCURRENCY não for SQL_CONCUR_READ_ONLY).
SQL_ATTR_CURSOR_TYPE para SQL_CURSOR_STATIC SQL_ATTR_SCROLLABLE para SQL_SCROLLABLE.

SQL_ATTR_SENSITIVITY para SQL_INSENSITIVE (se SQL_ATTR_CONCURRENCY for SQL_CONCUR_READ_ONLY).

SQL_ATTR_SENSITIVITY para SQL_UNSPECIFIED ou SQL_SENSITIVE (se SQL_ATTR_CONCURRENCY não for SQL_CONCUR_READ_ONLY).