Função SQLSetDescRec
Conformidade
Versão introduzida: Conformidade com as normas ODBC 3.0: ISO 92
Resumo
A função SQLSetDescRec define vários campos descritores que afetam o tipo de dados e o buffer vinculado a uma coluna ou dados de parâmetro.
Sintaxe
SQLRETURN SQLSetDescRec(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLSMALLINT Type,
SQLSMALLINT SubType,
SQLLEN Length,
SQLSMALLINT Precision,
SQLSMALLINT Scale,
SQLPOINTER DataPtr,
SQLLEN * StringLengthPtr,
SQLLEN * IndicatorPtr);
Argumentos
DescriptorHandle
[Entrada] Identificador do descritor. Este não deve ser um identificador IRD.
RecNumber
[Entrada] Indica o registro do descritor que contém os campos a serem definidos. Os registros do descritor são numerados a partir de 0, com o número de registro 0 sendo o registro do indicador. Este argumento deve ser igual ou superior a 0. Se RecNumber for maior que o valor de SQL_DESC_COUNT, SQL_DESC_COUNTis alterado para o valor de RecNumber.
Tipo
[Entrada] O valor para o qual definir o campo SQL_DESC_TYPE para o registro do descritor.
Subtipo
[Entrada] Para registros cujo tipo é SQL_DATETIME ou SQL_INTERVAL, esse é o valor para o qual definir o campo SQL_DESC_DATETIME_INTERVAL_CODE.
Comprimento
[Entrada] O valor para o qual definir o campo SQL_DESC_OCTET_LENGTH para o registro do descritor.
de precisão
[Entrada] O valor para o qual definir o campo SQL_DESC_PRECISION para o registro do descritor.
Escala
[Entrada] O valor para o qual definir o campo SQL_DESC_SCALE para o registro do descritor.
DataPtr
[Entrada ou saída diferida] O valor para o qual definir o campo SQL_DESC_DATA_PTR para o registro do descritor.
DataPtr pode ser definido como um ponteiro nulo.
O argumento DataPtr pode ser definido como um ponteiro nulo para definir o campo SQL_DESC_DATA_PTR como um ponteiro nulo. Se o identificador no argumento
StringLengthPtr
[Entrada ou saída diferida] O valor para o qual definir o campo SQL_DESC_OCTET_LENGTH_PTR para o registro do descritor.
StringLengthPtr pode ser definido como um ponteiro nulo para definir o campo SQL_DESC_OCTET_LENGTH_PTR como um ponteiro nulo.
IndicatorPtr
[Entrada ou saída diferida] O valor para o qual definir o campo SQL_DESC_INDICATOR_PTR para o registro do descritor.
IndicatorPtr pode ser definido como um ponteiro nulo para definir o campo SQL_DESC_INDICATOR_PTR como um ponteiro nulo.
Devoluções
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR ou SQL_INVALID_HANDLE.
Diagnóstico
Quando
SQLSTATE | Erro | Descrição |
---|---|---|
01000 | Advertência geral | Mensagem informativa específica do motorista. (A função retorna SQL_SUCCESS_WITH_INFO.) |
07009 | Índice de descritor inválido | O argumento RecNumber foi definido como 0 e o DescriptorHandle se referia a um identificador IPD. O argumento RecNumber foi inferior a 0. O argumento RecNumber era maior do que o número máximo de colunas ou parâmetros que a fonte de dados pode suportar, e o argumento DescriptorHandle era um APD, IPD ou ARD. O argumento RecNumber foi igual a 0, e o argumento DescriptorHandle referia-se a um APD implicitamente alocado. (Este erro não ocorre com um descritor de aplicativo explicitamente alocado porque não se sabe se um descritor de aplicativo explicitamente alocado é um APD ou ARD até o tempo de execução.) |
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. |
HY000 | Erro geral | Ocorreu um erro para o qual não havia SQLSTATE específico e para o qual nenhum SQLSTATE específico de implementação foi definido. A mensagem de erro retornada por |
HY001 | Erro de alocação de memória | O driver não pôde alocar a memória necessária para suportar a execução ou conclusão da função. |
HY010 | Erro de sequência de função | (DM) O (DM) SQLExecute, SQLExecDirect, SQLBulkOperationsou SQLSetPos foi chamado para o StatementHandle com o qual o DescriptorHandle foi associado e retornado SQL_NEED_DATA. Esta função foi chamada antes de os dados serem enviados para todos os parâmetros ou colunas de dados em execução. (DM) Uma função de execução assíncrona foi chamada para o identificador de conexão associado ao DescriptorHandle. Essa função assíncrona ainda estava em execução quando a função (DM) SQLExecute, SQLExecDirectou SQLMoreResults foi chamado para um dos identificadores de instrução associados ao DescriptorHandle e retornou SQL_PARAM_DATA_AVAILABLE. Esta função foi chamada antes que os dados fossem recuperados para todos os parâmetros transmitidos. |
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 pouca memória. |
HY016 | Não é possível modificar um descritor de linha de implementação | O argumento DescriptorHandle foi associado a uma IRD. |
HY021 | Informações inconsistentes do descritor | O campo Tipo As informações do descritor verificadas durante uma verificação de consistência não eram consistentes. (Consulte "Verificações de consistência", mais adiante nesta seção.) |
HY090 | String inválida ou comprimento do buffer | (DM) O driver era um driver ODBC 2.x, o descritor era um ARD, o argumento ColumnNumber foi definido como 0 e o valor especificado para o argumento BufferLength não era igual a 4. |
HY117 | A conexão é suspensa devido ao estado desconhecido da transação. Apenas as 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. |
HYT01 | O tempo limite de conexão expirou | O período de tempo limite de conexão expirou antes que a fonte de dados respondesse à solicitação. O período de tempo limite da conexão é definido por meio SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Driver não suporta esta função | (DM) O driver associado ao DescriptorHandle não suporta a função. |
Observações
Um aplicativo pode chamar SQLSetDescRec para definir os seguintes campos para uma única coluna ou parâmetro:
SQL_DESC_TYPE
SQL_DESC_DATETIME_INTERVAL_CODE (para registos cujo tipo é SQL_DATETIME ou SQL_INTERVAL)
SQL_DESC_OCTET_LENGTH
SQL_DESC_PRECISION
SQL_DESC_SCALE
SQL_DESC_DATA_PTR
SQL_DESC_OCTET_LENGTH_PTR
SQL_DESC_INDICATOR_PTR
Observação
Se uma chamada para SQLSetDescRec falhar, o conteúdo do registro descritor identificado pelo argumento RecNumber será indefinido.
Ao vincular uma coluna ou parâmetro, SQLSetDescRec permite alterar vários campos que afetam a associação sem chamar SQLBindCol ou SQLBindParameter ou fazer várias chamadas para SQLSetDescField. SQLSetDescRec pode definir campos em um descritor não associado atualmente a uma instrução. Observe que SQLBindParameter define mais campos do que SQLSetDescRec, pode definir campos em um APD e um IPD em uma chamada e não requer um identificador de descritor.
Observação
O atributo de instrução SQL_ATTR_USE_BOOKMARKS deve sempre ser definido antes de chamar SQLSetDescRec com um argumento RecNumber de 0 para definir campos de indicador. Embora isso não seja obrigatório, é altamente recomendado.
Verificações de consistência
Uma verificação de consistência é executada pelo driver automaticamente sempre que um aplicativo define o campo SQL_DESC_DATA_PTR de um APD, ARD ou IPD. Se qualquer um dos campos for inconsistente com outros campos, SQLSetDescRec retornará SQLSTATE HY021 (informações de descritor inconsistentes).
Sempre que um aplicativo define o campo SQL_DESC_DATA_PTR de um APD, ARD ou IPD, o driver verifica se o valor do campo SQL_DESC_TYPE e os valores aplicáveis a esse campo SQL_DESC_TYPE são válidos e consistentes. Essa verificação é sempre executada quando SQLBindParameter ou SQLBindCol é chamado ou quando SQLSetDescRec é chamado para um APD, ARD ou IPD. Esta verificação de consistência inclui as seguintes verificações nos campos do descritor:
O campo SQL_DESC_TYPE deve ser um dos tipos ODBC C ou SQL válidos ou um tipo SQL específico do driver. O campo SQL_DESC_CONCISE_TYPE deve ser um dos tipos ODBC C ou SQL válidos ou um tipo C ou SQL específico do driver, incluindo os tipos concisos datetime e interval.
Se o campo de registro SQL_DESC_TYPE for SQL_DATETIME ou SQL_INTERVAL, o campo SQL_DESC_DATETIME_INTERVAL_CODE deverá ser um dos códigos de data/hora ou intervalo válidos. (Consulte a descrição do campo SQL_DESC_DATETIME_INTERVAL_CODE em SQLSetDescField.)
Se o campo SQL_DESC_TYPE indicar um tipo numérico, os campos SQL_DESC_PRECISION e SQL_DESC_SCALE serão verificados como válidos.
Se o campo SQL_DESC_CONCISE_TYPE for um tipo de dados de carimbo de data/hora ou carimbo de data/hora, um tipo de intervalo com um componente de segundos ou um dos tipos de dados de intervalo com um componente de tempo, o campo SQL_DESC_PRECISION será verificado como uma precisão de segundos válida.
Se o SQL_DESC_CONCISE_TYPE for um tipo de dados de intervalo, verifica-se que o campo SQL_DESC_DATETIME_INTERVAL_PRECISION é um valor de precisão à esquerda de intervalo válido.
O campo SQL_DESC_DATA_PTR de um IPD não é normalmente definido; no entanto, um aplicativo pode fazer isso para forçar uma verificação de consistência dos campos IPD. Uma verificação de consistência não pode ser executada em um IRD. O valor para o qual o campo SQL_DESC_DATA_PTR do IPD está definido não é realmente armazenado e não pode ser recuperado por uma chamada para SQLGetDescField ou SQLGetDescRec; A configuração é feita apenas para forçar a verificação de consistência.
Funções relacionadas
Ver também
de referência da API ODBC
Arquivos de cabeçalho ODBC