Compartilhar via


Função SQLSetStmtAttr

Compatibilidade
Versão introduzida: ODBC 3.0 Conformidade com os padrões: ISO 92

Resumo
SQLSetStmtAttr define atributos relacionados a uma instrução.

Observação

Para obter mais informações sobre o que o Gerenciador de Driver mapeia essa função quando um aplicativo ODBC 3.x está trabalhando com um driver ODBC 2.x , consulte Mapeando funções de substituição para compatibilidade com versões anteriores de aplicativos.

Sintaxe

  
SQLRETURN SQLSetStmtAttr(  
     SQLHSTMT      StatementHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

Argumentos

Identificador de declaração
[Entrada] Identificador de instrução.

Atributo
[Entrada] Opção a ser definida, listada em "Comentários".

ValuePtr
[Entrada] Valor a ser associado ao Atributo. Dependendo do valor de Attribute, ValuePtr será um dos seguintes:

  • Um identificador de descritor ODBC.

  • Um valor SQLUINTEGER.

  • Um valor SQLULEN.

  • Um ponteiro para um dos seguintes:

    • Uma cadeia de caracteres terminada em nulo.

    • Um buffer binário.

    • Um valor ou matriz do tipo SQLLEN, SQLULEN ou SQLUSMALLINT.

    • Um valor definido pelo driver.

Se o argumento Attribute for um valor específico do driver, ValuePtr poderá ser um inteiro com sinal.

Comprimento da cadeia de caracteres
[Entrada] Se Attribute for um atributo definido por ODBC e ValuePtr apontar para uma cadeia de caracteres ou um buffer binário, esse argumento deverá ter o comprimento de *ValuePtr. Se Attribute for um atributo definido por ODBC e ValuePtr for um inteiro, StringLength será ignorado.

Se Attribute for um atributo definido pelo driver, o aplicativo indicará a natureza do atributo para o Gerenciador de Driver definindo o argumento StringLength . StringLength pode ter os seguintes valores:

  • Se ValuePtr for um ponteiro para uma cadeia de caracteres, StringLength será o comprimento da cadeia de caracteres ou SQL_NTS.

  • Se ValuePtr for um ponteiro para um buffer binário, o aplicativo colocará o resultado da macro SQL_LEN_BINARY_ATTR(length) em StringLength. Isso coloca um valor negativo em StringLength.

  • Se ValuePtr for um ponteiro para um valor diferente de uma cadeia de caracteres ou uma cadeia de caracteres binária, StringLength deverá ter o valor SQL_IS_POINTER.

  • Se ValuePtr contiver um valor de comprimento fixo, StringLength será SQL_IS_INTEGER ou SQL_IS_UINTEGER, conforme apropriado.

Devoluções

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR ou SQL_INVALID_HANDLE.

Diagnósticos

Quando SQLSetStmtAttr retorna SQL_ERROR ou SQL_SUCCESS_WITH_INFO, um valor SQLSTATE associado pode ser obtido chamando SQLGetDiagRec com um HandleType de SQL_HANDLE_STMT e um Handle de StatementHandle. A tabela a seguir lista os valores SQLSTATE normalmente retornados por SQLSetStmtAttr e explica cada um deles no contexto dessa função; a notação "(DM)" precede as descrições de SQLSTATEs retornadas pelo Gerenciador de Driver. O código de retorno associado a cada valor SQLSTATE é SQL_ERROR, a menos que indicado de outra forma.

SQLSTATE Erro Descrição
01000 Aviso geral Mensagem informativa específica do driver. (A função retorna SQL_SUCCESS_WITH_INFO.)
01S02 Valor da opção alterado O driver não dava suporte ao valor especificado em ValuePtr ou o valor especificado em ValuePtr era inválido devido às condições de trabalho de implementação, portanto, o driver substituiu por um valor semelhante. (SQLGetStmtAttr pode ser chamado para determinar o valor substituído temporariamente.) O valor substituto é válido para o StatementHandle até que o cursor seja fechado, momento em que o atributo de instrução é revertido para seu valor anterior. Os atributos de instrução que podem ser alterados são:

SQL_ ATTR_CONCURRENCY SQL_ ATTR_CURSOR_TYPE SQL_ ATTR_KEYSET_SIZE SQL_ ATTR_MAX_LENGTH SQL_ ATTR_MAX_ROWS SQL_ ATTR_QUERY_TIMEOUT SQL_ATTR_ROW_ARRAY_SIZE SQL_ ATTR_SIMULATE_CURSOR

(A função retorna SQL_SUCCESS_WITH_INFO.)
08S01 Falha no link de comunicação O link de comunicação entre o driver e a fonte de dados à qual o driver estava conectado falhou antes que a função concluísse o processamento.
24.000 Estado de cursor inválido O atributo estava SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_SIMULATE_CURSOR ou SQL_ATTR_USE_BOOKMARKS e o cursor estava aberto.
HY000 Erro geral Ocorreu um erro para o qual não havia SQLSTATE específico e para o qual nenhum SQLSTATE específico da implementação foi definido. A mensagem de erro retornada por SQLGetDiagRec no buffer *MessageText descreve o erro e sua causa.
HY001 Erro de alocação de memória O driver não pôde alocar a memória necessária para dar suporte à execução ou conclusão da função.
HY009 Uso inválido de ponteiro nulo O argumento Attribute identificou um atributo de instrução que exigia um atributo de cadeia de caracteres e o argumento ValuePtr era um ponteiro nulo.
HY010 Erro de sequência de função (DM) Uma função de execução assíncrona foi chamada para o identificador de conexão associado ao StatementHandle. Essa função assíncrona ainda estava em execução quando a função SQLSetStmtAttr foi chamada.

(DM) SQLExecute, SQLExecDirect ou SQLMoreResults foi chamado para o StatementHandle e retornado SQL_PARAM_DATA_AVAILABLE. Essa função foi chamada antes que os dados fossem recuperados para todos os parâmetros transmitidos.

(DM) Uma função de execução assíncrona foi chamada para o StatementHandle e ainda estava em execução quando essa função foi chamada.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations ou SQLSetPos foi chamado para o StatementHandle e retornado SQL_NEED_DATA. Essa função foi chamada antes que os dados fossem enviados para todos os parâmetros ou colunas de dados em execução.
HY011 O atributo não pode ser definido agora O Atributo foi SQL_ATTR_CONCURRENCY, SQL_ ATTR_CURSOR_TYPE, SQL_ ATTR_SIMULATE_CURSOR ou SQL_ ATTR_USE_BOOKMARKS, e a declaração foi preparada.
HY013 Erro de gerenciamento de memória A chamada de função não pôde ser processada porque os objetos de memória subjacentes não puderam ser acessados, possivelmente devido a condições de memória baixa.
HY017 Uso inválido de um identificador de descritor alocado automaticamente (DM) O argumento Attribute foi SQL_ATTR_IMP_ROW_DESC ou SQL_ATTR_IMP_PARAM_DESC.

(DM) O argumento Attribute era SQL_ATTR_APP_ROW_DESC ou SQL_ATTR_APP_PARAM_DESC, e o valor em ValuePtr era um identificador de descritor alocado implicitamente diferente do identificador originalmente alocado para o ARD ou APD.
HY024 Valor de atributo inválido Dado o valor de atributo especificado, um valor inválido foi especificado em ValuePtr. (O Gerenciador de Driver retorna esse SQLSTATE somente para atributos de conexão e instrução que aceitam um conjunto discreto de valores, como SQL_ATTR_ACCESS_MODE ou SQL_ ATTR_ASYNC_ENABLE. Para todos os outros atributos de conexão e instrução, o driver deve verificar o valor especificado em ValuePtr.)

O argumento Attribute era SQL_ATTR_APP_ROW_DESC ou SQL_ATTR_APP_PARAM_DESC, e ValuePtr era um identificador de descritor alocado explicitamente que não está na mesma conexão que o argumento StatementHandle .
HY090 Cadeia de caracteres ou comprimento de buffer inválido (DM) *ValuePtr é uma cadeia de caracteres e o argumento StringLength era menor que 0, mas não era SQL_NTS.
HY092 Identificador de atributo/opção inválido (DM) O valor especificado para o argumento Attribute não era válido para a versão do ODBC compatível com o driver.

(DM) O valor especificado para o argumento Attribute era um atributo somente leitura.
HY117 A conexão está suspensa devido ao estado desconhecido da transação. Somente funções de desconexão e somente leitura são permitidas. (DM) Para obter mais informações sobre o estado suspenso, consulte Função SQLEndTran.
HYC00 Recurso opcional não implementado O valor especificado para o argumento Attribute era um atributo de instrução ODBC válido para a versão do ODBC compatível com o driver, mas não tinha suporte do driver.

O argumento Attribute foi SQL_ATTR_ASYNC_ENABLE e uma chamada para SQLGetInfo com um InfoType de SQL_ASYNC_MODE retorna SQL_AM_CONNECTION.

O argumento Attribute foi SQL_ATTR_ENABLE_AUTO_IPD e o valor do atributo de conexão SQL_ATTR_AUTO_IPD foi SQL_FALSE.
HYT01 O tempo limite da conexão expirou O período de tempo limite da conexão expirou antes que a fonte de dados respondesse à solicitação. O período de tempo limite da conexão é definido por meio de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 O driver não suporta esta função (DM) O driver associado ao StatementHandle não dá suporte à função.
S1118 O driver não dá suporte à notificação assíncrona Se chamar SQLSetStmtAttr para definir SQL_ATTR_ASYNC_STMT_EVENT; a notificação assíncrona não terá suporte para o driver.

Comentários

Os atributos de instrução de uma instrução permanecem em vigor até que sejam alterados por outra chamada para SQLSetStmtAttr ou até que a instrução seja descartada chamando SQLFreeHandle. Chamar SQLFreeStmt com a opção SQL_CLOSE, SQL_UNBIND ou SQL_RESET_PARAMS não redefine os atributos da instrução.

Alguns atributos de instrução dão suporte à substituição de um valor semelhante se a fonte de dados não der suporte ao valor especificado em ValuePtr. Nesses casos, o driver retorna SQL_SUCCESS_WITH_INFO e SQLSTATE 01S02 (valor da opção alterado). Por exemplo, se Attribute for SQL_ATTR_CONCURRENCY e ValuePtr for SQL_CONCUR_ROWVER, e se a fonte de dados não der suporte a isso, o driver substituirá SQL_CONCUR_VALUES e retornará SQL_SUCCESS_WITH_INFO. Para determinar o valor substituído, um aplicativo chama SQLGetStmtAttr.

O formato do conjunto de informações com ValuePtr depende do atributo especificado. SQLSetStmtAttr aceita informações de atributo em um dos dois formatos diferentes: uma cadeia de caracteres ou um valor inteiro. O formato de cada um é anotado na descrição do atributo. Esse formato se aplica às informações retornadas para cada atributo em SQLGetStmtAttr. As cadeias de caracteres apontadas pelo argumento ValuePtr de SQLSetStmtAttr têm um comprimento de StringLength.

Observação

A capacidade de definir atributos de instrução no nível de conexão chamando SQLSetConnectAttr foi preterida no ODBC 3.x. Os aplicativos do ODBC 3.x nunca devem definir atributos de instrução no nível de conexão. Os atributos de instrução ODBC 3.x não podem ser definidos no nível de conexão, com exceção dos atributos SQL_ATTR_METADATA_ID e SQL_ATTR_ASYNC_ENABLE, que são atributos de conexão e atributos de instrução e podem ser definidos no nível de conexão ou no nível de instrução.

Observação

Os drivers ODBC 3.x só precisarão dar suporte a essa funcionalidade se precisarem trabalhar com aplicativos ODBC 2.x que definem opções de instrução ODBC 2.x no nível da conexão. Para obter mais informações, consulte "Definindo opções de instrução no nível de conexão" em Mapeamento SQLSetConnectOption no Apêndice G: Diretrizes de driver para compatibilidade com versões anteriores.

Atributos de instrução que definem campos de descritor

Muitos atributos de instrução correspondem a um campo de cabeçalho de um descritor. A configuração desses atributos realmente resulta na configuração dos campos do descritor. Definir campos por uma chamada para SQLSetStmtAttr em vez de SQLSetDescField tem a vantagem de que um identificador de descritor não precisa ser obtido para a chamada de função.

Cuidado

Chamar SQLSetStmtAttr para uma instrução pode afetar outras instruções. Isso ocorre quando o APD ou ARD associado à instrução é explicitamente alocado e também está associado a outras instruções. Como SQLSetStmtAttr modifica o APD ou o ARD, as modificações se aplicam a todas as instruções às quais esse descritor está associado. Se esse não for o comportamento necessário, o aplicativo deverá dissociar esse descritor das outras instruções (chamando SQLSetStmtAttr para definir o campo SQL_ATTR_APP_ROW_DESC ou SQL_ATTR_APP_PARAM_DESC como um identificador de descritor diferente) antes de chamar SQLSetStmtAttr novamente.

Quando um campo de descritor é definido como resultado do atributo de instrução correspondente que está sendo definido, o campo é definido apenas para os descritores aplicáveis que estão atualmente associados à instrução identificada pelo argumento StatementHandle e a configuração de atributo não afeta nenhum descritor que possa ser associado a essa instrução no futuro. Quando um campo descritor que também é um atributo de instrução é definido por uma chamada para SQLSetDescField, o atributo de instrução correspondente é definido. Se um descritor alocado explicitamente for dissociado de uma instrução, um atributo de instrução que corresponda a um campo de cabeçalho será revertido para o valor do campo no descritor alocado implicitamente.

Quando uma instrução é alocada (consulte SQLAllocHandle), quatro identificadores de descritor são alocados automaticamente e associados à instrução. Os identificadores de descritor alocados explicitamente podem ser associados à instrução chamando SQLAllocHandle com um fHandleType de SQL_HANDLE_DESC para alocar um identificador de descritor e, em seguida, chamando SQLSetStmtAttr para associar o identificador de descritor à instrução.

Os atributos de instrução na tabela a seguir correspondem aos campos de cabeçalho do descritor.

Atributo de instrução Campo de cabeçalho Desc.
SQL_ATTR_PARAM_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR APD
SQL_ATTR_PARAM_BIND_TYPE SQL_DESC_BIND_TYPE APD
SQL_ATTR_PARAM_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR APD
SQL_ATTR_PARAM_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR IPD
SQL_ATTR_PARAMS_PROCESSED_PTR SQL_DESC_ROWS_PROCESSED_PTR IPD
SQL_ATTR_PARAMSET_SIZE SQL_DESC_ARRAY_SIZE APD
SQL_ATTR_ROW_ARRAY_SIZE SQL_DESC_ARRAY_SIZE ARD
SQL_ATTR_ROW_BIND_OFFSET_PTR SQL_DESC_BIND_OFFSET_PTR ARD
SQL_ATTR_ROW_BIND_TYPE SQL_DESC_BIND_TYPE ARD
SQL_ATTR_ROW_OPERATION_PTR SQL_DESC_ARRAY_STATUS_PTR ARD
SQL_ATTR_ROW_STATUS_PTR SQL_DESC_ARRAY_STATUS_PTR IRD
SQL_ATTR_ROWS_FETCHED_PTR SQL_DESC_ROWS_PROCESSED_PTR IRD

Atributos de instrução

Os atributos definidos atualmente e a versão do ODBC na qual eles foram introduzidos são mostrados na tabela a seguir; Espera-se que mais atributos sejam definidos pelos motoristas para aproveitar as diferentes fontes de dados. Uma variedade de atributos é reservada pelo ODBC; os desenvolvedores de driver devem reservar valores para seu próprio uso específico do driver do Open Group. Confira Tipos de dados específicos do driver, tipos de descritor, tipos de informações, tipos de diagnóstico e atributos para obter mais informações.

Atributo Conteúdo do ValuePtr
SQL_ATTR_APP_PARAM_DESC (ODBC 3.0) O identificador para o APD para chamadas subsequentes para SQLExecute e SQLExecDirect no identificador de instrução. O valor inicial desse atributo é o descritor alocado implicitamente quando a instrução foi inicialmente alocada. Se o valor desse atributo for definido como SQL_NULL_DESC ou o identificador originalmente alocado para o descritor, um identificador APD alocado explicitamente que foi associado anteriormente ao identificador de instrução será dissociado dele e o identificador de instrução será revertido para o identificador APD alocado implicitamente.

Esse atributo não pode ser definido como um identificador de descritor que foi alocado implicitamente para outra instrução ou para outro identificador de descritor que foi definido implicitamente na mesma instrução; Os identificadores de descritor alocados implicitamente não podem ser associados a mais de uma instrução ou identificador de descritor.
SQL_ATTR_APP_ROW_DESC (ODBC 3.0) O identificador para o ARD para buscas subsequentes no identificador de instrução. O valor inicial desse atributo é o descritor alocado implicitamente quando a instrução foi inicialmente alocada. Se o valor desse atributo for definido como SQL_NULL_DESC ou o identificador originalmente alocado para o descritor, um identificador ARD alocado explicitamente que foi associado anteriormente ao identificador de instrução será dissociado dele e o identificador de instrução será revertido para o identificador ARD alocado implicitamente.

Esse atributo não pode ser definido como um identificador de descritor que foi alocado implicitamente para outra instrução ou para outro identificador de descritor que foi definido implicitamente na mesma instrução; Os identificadores de descritor alocados implicitamente não podem ser associados a mais de uma instrução ou identificador de descritor.
SQL_ATTR_ASYNC_ENABLE (ODBC 1.0) Um valor SQLULEN que especifica se uma função chamada com a instrução especificada é executada de forma assíncrona:

SQL_ASYNC_ENABLE_OFF = Desabilitar o suporte à execução assíncrona no nível da instrução (o padrão).

SQL_ASYNC_ENABLE_ON = Habilitar suporte à execução assíncrona no nível da instrução.

Para obter mais informações, consulte Execução assíncrona (método de pesquisa).

Para drivers com suporte à execução assíncrona no nível da instrução, o atributo de instrução SQL_ATTR_ASYNC_ENABLE é somente leitura. Seu valor é o mesmo que o valor do atributo de nível de conexão com o mesmo nome no momento em que o identificador de instrução foi alocado.

Chamar SQLSetStmtAttr para definir SQL_ATTR_ASYNC_ENABLE quando o InfoType SQL_ASYNC_MODE retorna SQL_AM_CONNECTION retorna SQLSTATE HYC00 (recurso opcional não implementado). Para obter mais informações, consulte Função SQLSetConnectAttr para obter mais informações.
SQL_ATTR_ASYNC_STMT_EVENT (ODBC 3.8) Um valor SQLPOINTER que é um identificador de evento.

A notificação de conclusão de funções assíncronas é habilitada chamando SQLSetStmtAttr para definir o atributo SQL_ATTR_ASYNC_STMT_EVENT e especificar o identificador de evento.
SQL_ATTR_ASYNC_STMT_PCALLBACK (ODBC 3.8) Um ponteiro SQLpara a função de retorno de chamada assíncrona.

Somente o Gerenciador de Driver pode chamar a função SQLSetStmtAttr de um driver com esse atributo.
SQL_ATTR_ASYNC_STMT_PCONTEXT (ODBC 3.8) Um ponteiro SQLPARA a estrutura de contexto

Somente o Gerenciador de Driver pode chamar a função SQLSetStmtAttr de um driver com esse atributo.
SQL_ATTR_CONCURRENCY (ODBC 2.0) Um valor SQLULEN que especifica a simultaneidade do cursor:

SQL_CONCUR_READ_ONLY = O cursor é somente leitura. Não são permitidas atualizações.

SQL_CONCUR_LOCK = Cursor usa o nível mais baixo de bloqueio suficiente para garantir que a linha possa ser atualizada.

SQL_CONCUR_ROWVER = Cursor usa o controle de simultaneidade otimista, comparando versões de linha como SQLBase ROWID ou Sybase TIMESTAMP.

SQL_CONCUR_VALUES = Cursor usa o controle de simultaneidade otimista, comparando valores.

O valor padrão para SQL_ATTR_CONCURRENCY é SQL_CONCUR_READ_ONLY.

Esse atributo não pode ser especificado para um cursor aberto. Para obter mais informações, consulte Tipos de simultaneidade.

Se o atributo SQL_ATTR_CURSOR_TYPE for alterado para um tipo que não dê suporte ao valor atual de SQL_ATTR_CONCURRENCY, o valor de SQL_ATTR_CONCURRENCY será alterado no momento da execução e um aviso será emitido quando SQLExecDirect ou SQLPrepare for chamado.

Se o driver der suporte à instrução SELECT FOR UPDATE e essa instrução for executada enquanto o valor de SQL_ATTR_CONCURRENCY estiver definido como SQL_CONCUR_READ_ONLY, um erro será retornado. Se o valor de SQL_ATTR_CONCURRENCY for alterado para um valor que o driver dá suporte para algum valor de SQL_ATTR_CURSOR_TYPE mas não para o valor atual de SQL_ATTR_CURSOR_TYPE, o valor de SQL_ATTR_CURSOR_TYPE será alterado em tempo de execução e SQLSTATE 01S02 (valor de opção alterado) será emitido quando SQLExecDirect ou SQLPrepare for chamado.

Se a simultaneidade especificada não for compatível com a fonte de dados, o driver substituirá uma simultaneidade diferente e retornará SQLSTATE 01S02 (valor da opção alterado). Por SQL_CONCUR_VALUES, o motorista substitui SQL_CONCUR_ROWVER e vice-versa. Por SQL_CONCUR_LOCK, o motorista substitui, em ordem, SQL_CONCUR_ROWVER ou SQL_CONCUR_VALUES. A validade do valor substituído não é verificada até o tempo de execução.

Para obter mais informações sobre a relação entre SQL_ATTR_CONCURRENCY e os outros atributos do cursor, consulte Características do cursor e tipo de cursor.
SQL_ATTR_CURSOR_SCROLLABLE (ODBC 3.0) Um valor SQLULEN que especifica o nível de suporte que o aplicativo exige. A configuração desse atributo afeta as chamadas subsequentes para SQLExecDirect e SQLExecute.

SQL_NONSCROLLABLE = Cursores roláveis não são necessários no identificador de instrução. Se o aplicativo chamar SQLFetchScroll nesse identificador, o único valor válido de FetchOrientation será SQL_FETCH_NEXT. Esse é o padrão.

SQL_SCROLLABLE = Cursores roláveis são necessários no identificador de instrução. Ao chamar SQLFetchScroll, o aplicativo pode especificar qualquer valor válido de FetchOrientation, obtendo o posicionamento do cursor em modos diferentes do modo sequencial.

Para obter mais informações sobre cursores roláveis, consulte Cursores roláveis. Para obter mais informações sobre a relação entre SQL_ATTR_CURSOR_SCROLLABLE e os outros atributos do cursor, consulte Características do cursor e tipo de cursor
SQL_ATTR_CURSOR_SENSITIVITY (ODBC 3.0) Um valor SQLULEN que especifica se os cursores no identificador de instrução tornam visíveis as alterações feitas em um conjunto de resultados por outro cursor. A configuração desse atributo afeta as chamadas subsequentes para SQLExecDirect e SQLExecute. Um aplicativo pode ler o valor desse atributo para obter seu estado inicial ou seu estado conforme definido mais recentemente pelo aplicativo.

SQL_UNSPECIFIED = Não é especificado qual é o tipo de cursor e se os cursores no identificador de instrução tornam visíveis as alterações feitas em um conjunto de resultados por outro cursor. Os cursores no identificador de instrução podem tornar visíveis nenhuma, algumas ou todas essas alterações. Esse é o padrão.

SQL_INSENSITIVE = Todos os cursores no identificador de instrução mostram o conjunto de resultados sem refletir nenhuma alteração feita nele por qualquer outro cursor. Cursores insensíveis são somente leitura. Isso corresponde a um cursor estático, que tem uma simultaneidade somente leitura.

SQL_SENSITIVE = Todos os cursores no identificador de instrução tornam visíveis todas as alterações feitas em um conjunto de resultados por outro cursor.

Para obter mais informações sobre a relação entre SQL_ATTR_CURSOR_SENSITIVITY e os outros atributos do cursor, consulte Características do cursor e tipo de cursor.
SQL_ATTR_CURSOR_TYPE (ODBC 2.0) Um valor SQLULEN que especifica o tipo de cursor:

SQL_CURSOR_FORWARD_ONLY = O cursor apenas rola para frente.

SQL_CURSOR_STATIC = Os dados no conjunto de resultados são estáticos.

SQL_CURSOR_KEYSET_DRIVEN = O driver salva e usa as chaves para o número de linhas especificado no atributo de instrução SQL_ATTR_KEYSET_SIZE.

SQL_CURSOR_DYNAMIC = O driver salva e usa apenas as chaves para as linhas no conjunto de linhas.

O valor padrão é SQL_CURSOR_FORWARD_ONLY. Esse atributo não pode ser especificado depois que a instrução SQL tiver sido preparada.

Se o tipo de cursor especificado não for compatível com a fonte de dados, o driver substituirá um tipo de cursor diferente e retornará SQLSTATE 01S02 (valor da opção alterado). Para um cursor misto ou dinâmico, o driver substitui, em ordem, um cursor estático ou controlado por conjunto de chaves. Para um cursor controlado por conjunto de chaves, o driver substitui um cursor estático.

Para obter mais informações sobre tipos de cursor rolável, consulte Tipos de cursor rolável. Para obter mais informações sobre a relação entre SQL_ATTR_CURSOR_TYPE e os outros atributos do cursor, consulte Características do cursor e tipo de cursor.
SQL_ATTR_ENABLE_AUTO_IPD (ODBC 3.0) Um valor SQLULEN que especifica se o preenchimento automático do IPD é executado:

SQL_TRUE = Ativa o preenchimento automático do IPD após uma chamada para SQLPrepare. SQL_FALSE = Desativa o preenchimento automático do IPD após uma chamada para SQLPrepare. (Um aplicativo ainda pode obter informações de campo IPD chamando SQLDescribeParam, se houver suporte.) O valor padrão do atributo de instrução SQL_ATTR_ENABLE_AUTO_IPD é SQL_FALSE. Para obter mais informações, consulte Preenchimento automático do IPD.
SQL_ATTR_FETCH_BOOKMARK_PTR (ODBC 3.0) Um SQLLEN * que aponta para um valor de indicador binário. Quando SQLFetchScroll é chamado com fFetchOrientation igual a SQL_FETCH_BOOKMARK, o driver seleciona o valor do indicador desse campo. Esse campo usa como padrão um ponteiro nulo. Para obter mais informações, consulte Rolagem por indicador.

O valor apontado por esse campo não é usado para operações de exclusão por indicador, atualização por indicador ou busca por indicador em SQLBulkOperations, que usam indicadores armazenados em cache em buffers de conjunto de linhas.
SQL_ATTR_IMP_PARAM_DESC (ODBC 3.0) A alça para o IPD. O valor desse atributo é o descritor alocado quando a instrução foi inicialmente alocada. O aplicativo não pode definir esse atributo.

Esse atributo pode ser recuperado por uma chamada para SQLGetStmtAttr , mas não definido por uma chamada para SQLSetStmtAttr.
SQL_ATTR_IMP_ROW_DESC (ODBC 3.0) O identificador para o IRD. O valor desse atributo é o descritor alocado quando a instrução foi inicialmente alocada. O aplicativo não pode definir esse atributo.

Esse atributo pode ser recuperado por uma chamada para SQLGetStmtAttr , mas não definido por uma chamada para SQLSetStmtAttr.
SQL_ATTR_KEYSET_SIZE (ODBC 2.0) Um SQLULEN que especifica o número de linhas no conjunto de chaves para um cursor controlado por conjunto de chaves. Se o tamanho do conjunto de chaves for 0 (o padrão), o cursor será totalmente controlado pelo conjunto de chaves. Se o tamanho do conjunto de chaves for maior que 0, o cursor será misto (controlado por conjunto de chaves dentro do conjunto de chaves e dinâmico fora do conjunto de chaves). O tamanho padrão do conjunto de chaves é 0. Para obter mais informações sobre cursores controlados por conjunto de chaves, consulte Cursores controlados por conjunto de chaves.

Se o tamanho especificado exceder o tamanho máximo do conjunto de chaves, o driver substituirá esse tamanho e retornará SQLSTATE 01S02 (valor da opção alterado).

SQLFetch ou SQLFetchScroll retornará um erro se o tamanho do conjunto de chaves for maior que 0 e menor que o tamanho do conjunto de linhas.
SQL_ATTR_MAX_LENGTH (ODBC 1.0) Um valor SQLULEN que especifica a quantidade máxima de dados que o driver retorna de um caractere ou coluna binária. Se ValuePtr for menor que o comprimento dos dados disponíveis, SQLFetch ou SQLGetData truncará os dados e retornará SQL_SUCCESS. Se ValuePtr for 0 (o padrão), o driver tentará retornar todos os dados disponíveis.

Se o comprimento especificado for menor que a quantidade mínima de dados que a fonte de dados pode retornar ou maior que a quantidade máxima de dados que a fonte de dados pode retornar, o driver substituirá esse valor e retornará SQLSTATE 01S02 (Valor da opção alterado).

O valor desse atributo pode ser definido em um cursor aberto; no entanto, a configuração pode não entrar em vigor imediatamente, caso em que o driver retornará SQLSTATE 01S02 (valor da opção alterado) e redefinirá o atributo para seu valor original.

Esse atributo destina-se a reduzir o tráfego de rede e deve ter suporte somente quando a fonte de dados (em oposição ao driver) em um driver de várias camadas puder implementá-lo. Esse mecanismo não deve ser usado por aplicativos para truncar dados; para truncar os dados recebidos, um aplicativo deve especificar o comprimento máximo do buffer no argumento BufferLength em SQLBindCol ou SQLGetData.
SQL_ATTR_MAX_ROWS (ODBC 1.0) Um valor SQLULEN correspondente ao número máximo de linhas a serem retornadas ao aplicativo para uma instrução SELECT . Se *ValuePtr for igual a 0 (o padrão), o driver retornará todas as linhas.

Esse atributo destina-se a reduzir o tráfego de rede. Conceitualmente, ele é aplicado quando o conjunto de resultados é criado e limita o conjunto de resultados às primeiras linhas ValuePtr . Se o número de linhas no conjunto de resultados for maior que ValuePtr, o conjunto de resultados será truncado.

SQL_ATTR_MAX_ROWS se aplica a todos os conjuntos de resultados na Instrução, incluindo aqueles retornados por funções de catálogo. SQL_ATTR_MAX_ROWS estabelece um máximo para o valor da contagem de linhas do cursor.

Um driver não deve emular SQL_ATTR_MAX_ROWS comportamento para SQLFetch ou SQLFetchScroll (se as limitações de tamanho do conjunto de resultados não puderem ser implementadas na fonte de dados) se não puder garantir que SQL_ATTR_MAX_ROWS será implementado corretamente.

É definido pelo driver se SQL_ATTR_MAX_ROWS se aplica a instruções diferentes de instruções SELECT (como funções de catálogo).

O valor desse atributo pode ser definido em um cursor aberto; no entanto, a configuração pode não entrar em vigor imediatamente, caso em que o driver retornará SQLSTATE 01S02 (valor da opção alterado) e redefinirá o atributo para seu valor original.
SQL_ATTR_METADATA_ID (ODBC 3.0) Um valor SQLULEN que determina como os argumentos de cadeia de caracteres de funções de catálogo são tratados.

Se SQL_TRUE, o argumento de cadeia de caracteres das funções de catálogo será tratado como identificadores. O caso não é significativo. Para cadeias de caracteres não delimitadas, o driver remove todos os espaços à direita e a cadeia de caracteres é dobrada em maiúsculas. Para cadeias de caracteres delimitadas, o driver remove todos os espaços à esquerda ou à direita e pega o que estiver entre os delimitadores literalmente. Se um desses argumentos for definido como um ponteiro nulo, a função retornará SQL_ERROR e SQLSTATE HY009 (uso inválido de ponteiro nulo).

Se SQL_FALSE, os argumentos de cadeia de caracteres das funções de catálogo não serão tratados como identificadores. O caso é significativo. Eles podem conter um padrão de pesquisa de cadeia de caracteres ou não, dependendo do argumento.

O valor padrão é SQL_FALSE.

O argumento TableType de SQLTables, que usa uma lista de valores, não é afetado por esse atributo.

SQL_ATTR_METADATA_ID também pode ser definido no nível de conexão. (Ele e SQL_ATTR_ASYNC_ENABLE são os únicos atributos de instrução que também são atributos de conexão.)

Para obter mais informações, confira Argumentos em funções de catálogo.
SQL_ATTR_NOSCAN (ODBC 1.0) Um valor SQLULEN que indica se o driver deve verificar cadeias de caracteres SQL em busca de sequências de escape:

SQL_NOSCAN_OFF = O driver verifica cadeias de caracteres SQL em busca de sequências de escape (o padrão).

SQL_NOSCAN_ON = O driver não verifica cadeias de caracteres SQL em busca de sequências de escape. Em vez disso, o driver envia a instrução diretamente para a fonte de dados.

Para obter mais informações, consulte Sequências de escape no ODBC.
SQL_ATTR_PARAM_BIND_OFFSET_PTR (ODBC 3.0) Um valor SQLULEN * que aponta para um deslocamento adicionado aos ponteiros para alterar a associação de parâmetros dinâmicos. Se esse campo não for nulo, o driver desreferenciará o ponteiro, adicionará o valor desreferenciado a cada um dos campos adiados no registro do descritor (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR e SQL_DESC_OCTET_LENGTH_PTR) e usará os novos valores de ponteiro ao associar. Ele é definido como nulo por padrão.

O deslocamento de vinculação é sempre adicionado diretamente aos campos SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR e SQL_DESC_OCTET_LENGTH_PTR. Se o deslocamento for alterado para um valor diferente, o novo valor ainda será adicionado diretamente ao valor no campo descritor. O novo deslocamento não é adicionado ao valor do campo mais quaisquer deslocamentos anteriores.

Para obter mais informações, consulte Deslocamentos de associação de parâmetro.

Definir esse atributo de instrução define o campo SQL_DESC_BIND_OFFSET_PTR no cabeçalho APD.
SQL_ATTR_PARAM_BIND_TYPE (ODBC 3.0) Um valor SQLULEN que indica a orientação de associação a ser usada para parâmetros dinâmicos.

Esse campo é definido como SQL_PARAM_BIND_BY_COLUMN (o padrão) para selecionar a associação em colunas.

Para selecionar a associação em linha, esse campo é definido como o comprimento da estrutura ou uma instância de um buffer que será associada a um conjunto de parâmetros dinâmicos. Esse comprimento deve incluir espaço para todos os parâmetros associados e qualquer preenchimento da estrutura ou buffer para garantir que, quando o endereço de um parâmetro associado for incrementado com o comprimento especificado, o resultado aponte para o início do mesmo parâmetro no próximo conjunto de parâmetros. Ao usar o operador sizeof em ANSI C, esse comportamento é garantido.

Para obter mais informações, consulte Matrizes de associação de parâmetros.

Definir esse atributo de instrução define o campo SQL_DESC_ BIND_TYPE no cabeçalho APD.
SQL_ATTR_PARAM_OPERATION_PTR (ODBC 3.0) Um valor SQLUSMALLINT * que aponta para uma matriz de valores SQLUSMALLINT usados para ignorar um parâmetro durante a execução de uma instrução SQL. Cada valor é definido como SQL_PARAM_PROCEED (para o parâmetro a ser executado) ou SQL_PARAM_IGNORE (para que o parâmetro seja ignorado).

Um conjunto de parâmetros pode ser ignorado durante o processamento definindo o valor de status na matriz apontada por SQL_DESC_ARRAY_STATUS_PTR no APD para SQL_PARAM_IGNORE. Um conjunto de parâmetros é processado se seu valor de status for definido como SQL_PARAM_PROCEED ou se nenhum elemento na matriz estiver definido.

Esse atributo de instrução pode ser definido como um ponteiro nulo, nesse caso, o driver não retorna valores de status de parâmetro. Esse atributo pode ser definido a qualquer momento, mas o novo valor não é usado até a próxima vez que SQLExecDirect ou SQLExecute for chamado.

Esse atributo é ignorado quando não há nenhum parâmetro associado.

Para obter mais informações, consulte Usando matrizes de parâmetros.

Definir esse atributo de instrução define o campo SQL_DESC_ARRAY_STATUS_PTR no cabeçalho APD.
SQL_ATTR_PARAM_STATUS_PTR (ODBC 3.0) Um valor SQLUSMALLINT * que aponta para uma matriz de valores SQLUSMALLINT contendo informações de status para cada linha de valores de parâmetro após uma chamada para SQLExecute ou SQLExecDirect. Este campo é obrigatório somente se PARAMSET_SIZE for maior que 1.

Os valores de status podem conter os seguintes valores:

SQL_PARAM_SUCCESS: A instrução SQL foi executada com êxito para este conjunto de parâmetros.

SQL_PARAM_SUCCESS_WITH_INFO: A instrução SQL foi executada com êxito para este conjunto de parâmetros; No entanto, as informações de aviso estão disponíveis na estrutura de dados de diagnóstico.

SQL_PARAM_ERROR: Ocorreu um erro no processamento deste conjunto de parâmetros. Informações adicionais sobre erros estão disponíveis na estrutura de dados de diagnóstico.

SQL_PARAM_UNUSED: Este conjunto de parâmetros não foi usado, possivelmente devido ao fato de que algum conjunto de parâmetros anterior causou um erro que abortou o processamento adicional ou porque SQL_PARAM_IGNORE foi definido para esse conjunto de parâmetros na matriz especificada pelo SQL_ATTR_PARAM_OPERATION_PTR.

SQL_PARAM_DIAG_UNAVAILABLE: O driver trata matrizes de parâmetros como uma unidade monolítica e, portanto, não gera esse nível de informações de erro.

Esse atributo de instrução pode ser definido como um ponteiro nulo, nesse caso, o driver não retorna valores de status de parâmetro. Esse atributo pode ser definido a qualquer momento, mas o novo valor não é usado até a próxima vez que SQLExecute ou SQLExecDirect for chamado. Observe que definir esse atributo pode afetar o comportamento do parâmetro de saída implementado pelo driver.

Para obter mais informações, consulte Usando matrizes de parâmetros.

A configuração desse atributo de instrução define o campo SQL_DESC_ARRAY_STATUS_PTR no cabeçalho IPD.
SQL_ATTR_PARAMS_PROCESSED_PTR (ODBC 3.0) Um campo de registro SQLULEN * que aponta para um buffer no qual retornar o número de conjuntos de parâmetros que foram processados, incluindo conjuntos de erros. Nenhum número será retornado se este for um ponteiro nulo.

A configuração desse atributo de instrução define o campo SQL_DESC_ROWS_PROCESSED_PTR no cabeçalho IPD.

Se a chamada para SQLExecDirect ou SQLExecute que preenche o buffer apontado por esse atributo não retornar SQL_SUCCESS ou SQL_SUCCESS_WITH_INFO, o conteúdo do buffer será indefinido.

Para obter mais informações, consulte Usando matrizes de parâmetros.
SQL_ATTR_PARAMSET_SIZE (ODBC 3.0) Um valor SQLULEN que especifica o número de valores para cada parâmetro. Se SQL_ATTR_PARAMSET_SIZE for maior que 1, SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR e SQL_DESC_OCTET_LENGTH_PTR do APD apontam para matrizes. A cardinalidade de cada matriz é igual ao valor desse campo.

Esse atributo é ignorado quando não há nenhum parâmetro associado.

Para obter mais informações, consulte Usando matrizes de parâmetros.

A configuração desse atributo de instrução define o campo SQL_DESC_ARRAY_SIZE no cabeçalho APD.
SQL_ATTR_QUERY_TIMEOUT (ODBC 1.0) Um valor SQLULEN correspondente ao número de segundos para aguardar a execução de uma instrução SQL antes de retornar ao aplicativo. Se ValuePtr for igual a 0 (padrão), não haverá tempo limite.

Se o tempo limite especificado exceder o tempo limite máximo na fonte de dados ou for menor que o tempo limite mínimo, SQLSetStmtAttr substituirá esse valor e retornará SQLSTATE 01S02 (Valor da opção alterado).

Observe que o aplicativo não precisa chamar SQLCloseCursor para reutilizar a instrução se uma instrução SELECT tiver atingido o tempo limite.

O tempo limite de consulta definido neste atributo de instrução é válido nos modos síncrono e assíncrono.
SQL_ATTR_RETRIEVE_DATA (ODBC 2.0) Um valor SQLULEN:

SQL_RD_ON = SQLFetchScroll e, no ODBC 3.x, o SQLFetch recupera dados depois de posicionar o cursor no local especificado. Esse é o padrão.

SQL_RD_OFF = SQLFetchScroll e, no ODBC 3.x, SQLFetch não recuperam dados depois de posicionar o cursor.

Ao definir SQL_RETRIEVE_DATA como SQL_RD_OFF, um aplicativo pode verificar se existe uma linha ou recuperar um indicador para a linha sem incorrer na sobrecarga de recuperar linhas. Para obter mais informações, consulte Rolagem e busca de linhas.

O valor desse atributo pode ser definido em um cursor aberto; no entanto, a configuração pode não entrar em vigor imediatamente, caso em que o driver retornará SQLSTATE 01S02 (valor da opção alterado) e redefinirá o atributo para seu valor original.
SQL_ATTR_ROW_ARRAY_SIZE (ODBC 3.0) Um valor SQLULEN que especifica o número de linhas retornadas por cada chamada para SQLFetch ou SQLFetchScroll. Também é o número de linhas em uma matriz de indicadores usada em uma operação de indicadores em massa no SQLBulkOperations. O valor padrão é 1.

Se o tamanho do conjunto de linhas especificado exceder o tamanho máximo do conjunto de linhas compatível com a fonte de dados, o driver substituirá esse valor e retornará SQLSTATE 01S02 (valor da opção alterado).

Para obter mais informações, consulte Tamanho do conjunto de linhas.

Definir esse atributo de instrução define o campo SQL_DESC_ARRAY_SIZE no cabeçalho ARD.
SQL_ATTR_ROW_BIND_OFFSET_PTR (ODBC 3.0) Um valor SQLULEN * que aponta para um deslocamento adicionado aos ponteiros para alterar a associação de dados de coluna. Se esse campo não for nulo, o driver desreferenciará o ponteiro, adicionará o valor desreferenciado a cada um dos campos adiados no registro do descritor (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR e SQL_DESC_OCTET_LENGTH_PTR) e usará os novos valores de ponteiro ao associar. Ele é definido como nulo por padrão.

A configuração desse atributo de instrução define o campo SQL_DESC_BIND_OFFSET_PTR no cabeçalho ARD.
SQL_ATTR_ROW_BIND_TYPE (ODBC 1.0) Um valor SQLULEN que define a orientação de associação a ser usada quando SQLFetch ou SQLFetchScroll é chamado na instrução associada. A associação em colunas é selecionada definindo o valor como SQL_BIND_BY_COLUMN. A associação de linha a linha é selecionada definindo o valor como o comprimento de uma estrutura ou uma instância de um buffer no qual as colunas de resultado serão associadas.

Se um comprimento for especificado, ele deverá incluir espaço para todas as colunas associadas e qualquer preenchimento da estrutura ou buffer para garantir que, quando o endereço de uma coluna associada for incrementado com o comprimento especificado, o resultado aponte para o início da mesma coluna na próxima linha. Ao usar o operador sizeof com estruturas ou uniões em ANSI C, esse comportamento é garantido.

A associação em colunas é a orientação de associação padrão para SQLFetch e SQLFetchScroll.

Para obter mais informações, consulte Vinculando colunas para uso com cursores de bloco.

A configuração desse atributo de instrução define o campo SQL_DESC_BIND_TYPE no cabeçalho ARD.
SQL_ATTR_ROW_NUMBER (ODBC 2.0) Um valor SQLULEN que é o número da linha atual em todo o conjunto de resultados. Se o número da linha atual não puder ser determinado ou não houver nenhuma linha atual, o driver retornará 0.

Esse atributo pode ser recuperado por uma chamada para SQLGetStmtAttr , mas não definido por uma chamada para SQLSetStmtAttr.
SQL_ATTR_ROW_OPERATION_PTR (ODBC 3.0) Um valor SQLUSMALLINT * que aponta para uma matriz de valores SQLUSMALLINT usados para ignorar uma linha durante uma operação em massa usando SQLSetPos. Cada valor é definido como SQL_ROW_PROCEED (para a linha a ser incluída na operação em massa) ou SQL_ROW_IGNORE (para a linha a ser excluída da operação em massa). (As linhas não podem ser ignoradas usando essa matriz durante as chamadas para SQLBulkOperations.)

Esse atributo de instrução pode ser definido como um ponteiro nulo, nesse caso, o driver não retorna valores de status de linha. Esse atributo pode ser definido a qualquer momento, mas o novo valor não é usado até a próxima vez que SQLSetPos for chamado.

Para obter mais informações, consulte Atualizando linhas no conjunto de linhas com SQLSetPos e Excluindo linhas no conjunto de linhas com SQLSetPos.

A configuração desse atributo de instrução define o campo SQL_DESC_ARRAY_STATUS_PTR no ARD.
SQL_ATTR_ROW_STATUS_PTR (ODBC 3.0) Um valor SQLUSMALLINT * que aponta para uma matriz de valores SQLUSMALLINT contendo valores de status de linha após uma chamada para SQLFetch ou SQLFetchScroll. A matriz tem tantos elementos quanto linhas no conjunto de linhas.

Esse atributo de instrução pode ser definido como um ponteiro nulo, nesse caso, o driver não retorna valores de status de linha. Esse atributo pode ser definido a qualquer momento, mas o novo valor não é usado até a próxima vez que SQLBulkOperations, SQLFetch, SQLFetchScroll ou SQLSetPos for chamado.

Para obter mais informações, consulte Número de linhas buscadas e Status.

A configuração desse atributo de instrução define o campo SQL_DESC_ARRAY_STATUS_PTR no cabeçalho IRD.

Esse atributo é mapeado por um driver ODBC 2.x para a matriz rgbRowStatus em uma chamada para SQLExtendedFetch.
SQL_ATTR_ROWS_FETCHED_PTR (ODBC 3.0) Um valor SQLULEN * que aponta para um buffer no qual retornar o número de linhas buscadas após uma chamada para SQLFetch ou SQLFetchScroll; o número de linhas afetadas por uma operação em massa executada por uma chamada para SQLSetPos com um argumento Operation de SQL_REFRESH; ou o número de linhas afetadas por uma operação em massa executada por SQLBulkOperations. Esse número inclui linhas de erro.

Para obter mais informações, consulte Número de linhas buscadas e Status.

Definir esse atributo de instrução define o campo SQL_DESC_ROWS_PROCESSED_PTR no cabeçalho IRD.

Se a chamada para SQLFetch ou SQLFetchScroll que preenche o buffer apontado por esse atributo não retornar SQL_SUCCESS ou SQL_SUCCESS_WITH_INFO, o conteúdo do buffer será indefinido.
SQL_ATTR_SIMULATE_CURSOR (ODBC 2.0) Um valor SQLULEN que especifica se os drivers que simulam instruções de atualização e exclusão posicionadas garantem que essas instruções afetem apenas uma única linha.

Para simular instruções de atualização e exclusão posicionadas, a maioria dos drivers constrói uma instrução UPDATE ou DELETE pesquisada contendo uma cláusula WHERE que especifica o valor de cada coluna na linha atual. A menos que essas colunas constituam uma chave exclusiva, essa instrução pode afetar mais de uma linha.

Para garantir que essas instruções afetem apenas uma linha, o driver determina as colunas em uma chave exclusiva e adiciona essas colunas ao conjunto de resultados. Se um aplicativo garantir que as colunas no conjunto de resultados componham uma chave exclusiva, o driver não precisará fazer isso. Isso pode reduzir o tempo de execução.

SQL_SC_NON_UNIQUE = O driver não garante que as instruções de atualização ou exclusão posicionadas simuladas afetarão apenas uma linha; É responsabilidade do aplicativo fazê-lo. Se uma instrução afetar mais de uma linha, SQLExecute, SQLExecDirect ou SQLSetPos retornará SQLSTATE 01001 (conflito de operação do cursor).

SQL_SC_TRY_UNIQUE = O driver tenta garantir que as instruções de atualização ou exclusão posicionadas simuladas afetem apenas uma linha. O driver sempre executa essas instruções, mesmo que elas possam afetar mais de uma linha, como quando não há nenhuma chave exclusiva. Se uma instrução afetar mais de uma linha, SQLExecute, SQLExecDirect ou SQLSetPos retornará SQLSTATE 01001 (conflito de operação do cursor).

SQL_SC_UNIQUE = O driver garante que as instruções de atualização ou exclusão posicionadas simuladas afetem apenas uma linha. Se o driver não puder garantir isso para uma determinada instrução, SQLExecDirect ou SQLPrepare retornará um erro.

Se a fonte de dados fornecer suporte SQL nativo para instruções de atualização e exclusão posicionadas e o driver não simular cursores, SQL_SUCCESS será retornado quando SQL_SC_UNIQUE for solicitado para SQL_SIMULATE_CURSOR. SQL_SUCCESS_WITH_INFO é devolvido se SQL_SC_TRY_UNIQUE ou SQL_SC_NON_UNIQUE for solicitado. Se a fonte de dados fornecer o SQL_SC_TRY_UNIQUE nível de suporte e o driver não, SQL_SUCCESS será retornado para SQL_SC_TRY_UNIQUE e SQL_SUCCESS_WITH_INFO será retornado para SQL_SC_NON_UNIQUE.

Se o tipo de simulação de cursor especificado não for compatível com a fonte de dados, o driver substituirá um tipo de simulação diferente e retornará SQLSTATE 01S02 (valor da opção alterado). Por SQL_SC_UNIQUE, o motorista substitui, em ordem, SQL_SC_TRY_UNIQUE ou SQL_SC_NON_UNIQUE. Para SQL_SC_TRY_UNIQUE, o motorista substitui SQL_SC_NON_UNIQUE.

O padrão é SQL_SC_UNIQUE.

Para obter mais informações, consulte Simulando instruções de atualização e exclusão posicionadas.
SQL_ATTR_USE_BOOKMARKS (ODBC 2.0) Um valor SQLULEN que especifica se um aplicativo usará indicadores com um cursor:

SQL_UB_OFF = Desativado (o padrão)

SQL_UB_VARIABLE = Um aplicativo usará indicadores com um cursor e o driver fornecerá indicadores de comprimento variável se houver suporte para eles. SQL_UB_FIXED foi preterido no ODBC 3.x. Os aplicativos ODBC 3.x sempre devem usar indicadores de comprimento variável, mesmo ao trabalhar com drivers ODBC 2.x (que dão suporte apenas a indicadores de comprimento fixo de 4 bytes). Isso ocorre porque um indicador de comprimento fixo é apenas um caso especial de um indicador de comprimento variável. Ao trabalhar com um driver ODBC 2.x , o Gerenciador de Driver mapeia SQL_UB_VARIABLE para SQL_UB_FIXED.

Para usar indicadores com um cursor, o aplicativo deve especificar esse atributo com o valor SQL_UB_VARIABLE antes de abrir o cursor.

Para obter mais informações, consulte Recuperando indicadores.

[1] Essas funções podem ser chamadas de forma assíncrona somente se o descritor for um descritor de implementação, não um descritor de aplicativo.

Consulte Associação em coluna e Associação em linha.

Para obter informações sobre Consulte
Cancelando o processamento de instruções Função SQLCancel
Retornando a configuração de um atributo de conexão Função SQLGetConnectAttr
Retornando a configuração de um atributo de instrução Função SQLGetStmtAttr
Configurando um atributo de conexão Função SQLSetConnectAttr
Definindo um único campo do descritor Função SQLSetDescField

Confira também

Referência de API do ODBC
Arquivos de cabeçalho ODBC