Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Conformidade
Versão Introduzida: Normas ODBC 1.0 Conformidade: ISO 92
Summary
O SQLDescribeCol devolve o descritor do resultado - nome da coluna, tipo, tamanho da coluna, dígitos decimais e anulabilidade - para uma coluna do conjunto de resultados. Esta informação também está disponível nos campos do IRD.
Syntax
SQLRETURN SQLDescribeCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLCHAR * ColumnName,
SQLSMALLINT BufferLength,
SQLSMALLINT * NameLengthPtr,
SQLSMALLINT * DataTypePtr,
SQLULEN * ColumnSizePtr,
SQLSMALLINT * DecimalDigitsPtr,
SQLSMALLINT * NullablePtr);
Arguments
HandleStatement
[Entrada] Identificador do extrato.
Número da Coluna
[Entrada] Número de colunas de dados de resultados, ordenados sequencialmente em ordem crescente de colunas, começando em 1. O argumento ColumnNumber também pode ser definido como 0 para descrever a coluna de favoritos.
NomeDaColuna
[Saída] Apontador para um buffer terminado por nulo onde se deve devolver o nome da coluna. Este valor é lido a partir do campo SQL_DESC_NAME do IRD. Se a coluna não for nomeada ou o nome da coluna não puder ser determinado, o driver devolve uma cadeia vazia.
Se o ColumnName for NULL, o NameLengthPtr continuará a devolver o número total de caracteres (excluindo o carácter de terminação nula para os dados de caracteres) disponíveis para devolver no buffer apontado pelo ColumnName.
BufferLength
[Entrada] Comprimento do buffer *Nomecolina , em caracteres.
NomeComprimentoPtr
[Saída] Apontador para um buffer onde se deve devolver o número total de caracteres (excluindo a terminação nula) disponíveis para devolver em *NomeColumnName. Se o número de caracteres disponíveis para devolver for maior ou igual a BufferLength, o nome da coluna em *ColumnName é truncado para BufferLength menos o comprimento de um carácter de terminação nula.
DataTypePtr
[Saída] Apontador para um buffer onde se deve devolver o tipo de dado SQL da coluna. Este valor é lido a partir do campo SQL_DESC_CONCISE_TYPE do IRD. Este será um dos valores nos Tipos de Dados SQL, ou um tipo de dado SQL específico do driver. Se o tipo de dado não puder ser determinado, o driver devolve SQL_UNKNOWN_TYPE.
No ODBC 3. x, SQL_TYPE_DATE, SQL_TYPE_TIME ou SQL_TYPE_TIMESTAMP é devolvido em *DataTypePtr para dados de data, hora ou carimbo temporal, respetivamente; em ODBC 2. X, SQL_DATE, SQL_TIME ou SQL_TIMESTAMP é devolvido. O Gestor de Drivers realiza os mapeamentos necessários quando um ODBC 2. a aplicação x está a funcionar com um ODBC 3. driver x ou quando é um ODBC 3. A aplicação x está a funcionar com um ODBC 2. Condutor X .
Quando Número de Coluna é igual a 0 (para uma coluna de favoritos), SQL_BINARY é devolvido em *DataTypePtr para marcadores de comprimento variável. (SQL_INTEGER é devolvido se os favoritos forem usados por um ODBC 3. Aplicação x a funcionar com um ODBC 2. x ou por um ODBC 2. Aplicação x a funcionar com um ODBC 3. x condutor.)
Para mais informações sobre estes tipos de dados, consulte Tipos de Dados SQL no Apêndice D: Tipos de Dados. Para informações sobre tipos de dados SQL específicos de cada driver, consulte a documentação do driver.
ColumnSizePtr
[Saída] Apontador para um buffer onde se deve devolver o tamanho (em caracteres) da coluna na fonte de dados. Se o tamanho da coluna não puder ser determinado, o driver retorna 0. Para mais informações sobre o tamanho da coluna, consulte Tamanho da Coluna, Dígitos Decimais, Comprimento do Octeto de Transferência e Tamanho do Ecrã no Apêndice D: Tipos de Dados.
DecimalDigitsPtr
[Saída] Apontador para um buffer onde deves o número de dígitos decimais da coluna na fonte de dados. Se o número de dígitos decimais não puder ser determinado ou não for aplicável, o driver devolve 0. Para mais informações sobre dígitos decimais, consulte Tamanho da Coluna, Dígitos Decimais, Comprimento do Octeto de Transferência e Tamanho do Ecrã no Apêndice D: Tipos de Dados.
NullablePtr
[Saída] Apontador para um buffer no qual devolver um valor que indica se a coluna permite valores NULL. Este valor é lido a partir do campo SQL_DESC_NULLABLE do IRD. O valor é um dos seguintes:
SQL_NO_NULLS: A coluna não permite valores NULL.
SQL_NULLABLE: A coluna permite valores NULL.
SQL_NULLABLE_UNKNOWN: O driver não pode determinar se a coluna permite valores NULL.
Devoluções
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ou SQL_INVALID_HANDLE.
Diagnósticos
Quando o SQLDescribeCol 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 seguinte lista os valores SQLSTATE normalmente devolvidos pelo SQLDescribeCol e explica cada um no contexto desta função; a notação "(DM)" precede as descrições dos SQLSTATEs devolvidas pelo Gestor de Drivers. O código de retorno associado a cada valor SQLSTATE é SQL_ERROR, salvo indicação em contrário.
| SQLSTATE | Erro | Description |
|---|---|---|
| 01000 | Aviso geral | Mensagem informativa específica para o condutor. (Função devolve SQL_SUCCESS_WITH_INFO.) |
| 01004 | Dados de cadeia, truncados à direita | O buffer *ColumnName não era suficientemente grande para devolver o nome da coluna inteiro, pelo que o nome da coluna foi truncado. O comprimento do nome da coluna não arrunhado é devolvido em *NameLengthPtr. (Função devolve SQL_SUCCESS_WITH_INFO.) |
| 07005 | Instrução preparada, não uma especificação de cursor | A instrução associada ao HandleStatement não devolveu um conjunto de resultados. Não havia colunas para descrever. |
| 07009 | Índice de descritores inválido | (DM) O valor especificado para o argumento Número da Coluna era igual a 0, e a opção de SQL_ATTR_USE_BOOKMARKS afirmação era SQL_UB_OFF. O valor especificado para o argumento Número das Colunas era maior do que o número de colunas no conjunto de resultados. |
| 08S01 | Falha da ligação de comunicação | A ligação de comunicação entre o driver e a fonte de dados à qual o driver estava ligado falhou antes de a função concluir o processamento. |
| HY000 | Erro geral | Ocorreu um erro para o qual não existia um SQLSTATE específico e para o qual não estava definido nenhum SQLSTATE específico da implementação. A mensagem de erro devolvida pelo SQLGetDiagRec no buffer *MessageText descreve o erro e a sua causa. |
| HY001 | Falha de alocação de memória | O driver não conseguia alocar a memória necessária para suportar a execução ou conclusão da função. |
| HY008 | Operação cancelada | O processamento assíncrono foi ativado para o StatementHandle. A função era chamada e, antes de terminar a execução, o SQLCancel ou SQLCancelHandle era chamado no StatementHandle. Depois, a função era chamada novamente no StatementHandle. A função era chamada e, antes de terminar a execução, o SQLCancel ou SQLCancelHandle era chamado no StatementHandle a partir de um thread diferente numa aplicação multithread. |
| HY010 | Erro de sequência de funções | (DM) Uma função de execução assíncrona era chamada para o handle de ligação associado ao StatementHandle. Esta função assíncrona ainda estava a ser executada quando o SQLDescribeCol foi chamado. (DM) SQLExecute, SQLExecDirect ou SQLMoreResults era chamado para o StatementHandle e devolvido SQL_PARAM_DATA_AVAILABLE. Esta função era chamada antes de os dados serem recuperados para todos os parâmetros transmitidos. (DM) Uma função de execução assíncrona (não esta) era chamada para o StatementHandle e continuava a ser executada quando esta função era chamada. (DM) A função era chamada antes de chamar SQLPrepare, SQLExecute ou uma função de catálogo no handle da instrução. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations ou SQLSetPos era chamado para o StatementHandle e devolvido SQL_NEED_DATA. Esta função era chamada antes de os dados serem enviados para todos os parâmetros ou colunas de dados na execução. |
| HY013 | Erro de gestão de memória | A chamada de função não podia ser processada porque os objetos de memória subjacentes não podiam ser acedidos, possivelmente devido a condições de baixa memória. |
| HY090 | Comprimento inválido da corda ou do buffer | (DM) O valor especificado para o argumento BufferLength era inferior a 0. |
| HY117 | A ligação é suspensa devido ao estado desconhecido da transação. Apenas funções de desconexão e de leitura são permitidas. | (DM) Para mais informações sobre o estado suspenso, veja Função SQLEndTran. |
| HYT01 | Expirou o tempo limite de ligação | O período de timeout da ligação expirou antes de a fonte de dados responder ao pedido. O período de tempo de expiração da ligação é definido através do SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | O driver não suporta esta função | (DM) O driver associado ao StatementHandle não suporta a função. |
| IM017 | A sondagem está desativada no modo de notificação assíncrona | Sempre que o modelo de notificação é utilizado, o sonding é desativado. |
| IM018 | O SQLCompleteAsync não foi chamado para completar a operação assíncrona anterior neste handle. | Se a chamada de função anterior no handle devolver SQL_STILL_EXECUTING e se o modo de notificação estiver ativado, o SQLCompleteAsync deve ser chamado no handle para fazer o pós-processamento e completar a operação. |
O SQLDescribeCol pode devolver qualquer estado SQLSTATE que possa ser devolvido por SQLPrepare ou SQLExecute quando chamado após SQLPrepare e antes do SQLExecute, dependendo de quando a fonte de dados avalia a instrução SQL associada ao handle da instrução.
Por razões de desempenho, uma aplicação não deve chamar o SQLDescribeCol antes de executar uma instrução.
Comments
Uma aplicação normalmente chama SQLDescribeCol após uma chamada ao SQLPrepare e antes ou depois da chamada associada ao SQLExecute. Uma aplicação também pode chamar SQLDescribeCol após uma chamada ao SQLExecDirect. Para mais informações, consulte Metadados do Conjunto de Resultados.
O SQLDescribeCol recupera o nome, tipo e comprimento da coluna gerados por uma instrução SELECT . Se a coluna for uma expressão, *ColumnName é ou uma cadeia vazia ou um nome definido pelo driver.
Note
O ODBC suporta SQL_NULLABLE_UNKNOWN como extensão, embora a especificação Open Group e SQL Access Group Call Level Interface não especifique a opção para SQLDescribeCol.
Funções relacionadas
| Para obter informações sobre | Veja |
|---|---|
| Ligar um buffer a uma coluna num conjunto de resultados | SQLBindCol |
| Cancelamento do processamento de extratos | SQLCancel |
| Devolver informação sobre uma coluna num conjunto de resultados | SQLColAttribute |
| Obtenção de várias linhas de dados | SQLFetch |
| Devolvendo o número de colunas do conjunto de resultados | SQLNumResultCols |
| Preparação de uma declaração para execução | SQLPrepare |