Funzione SQLGetDescField
Conformità
Versione introdotta: Conformità agli standard ODBC 3.0: ISO 92
Riepilogo
SQLGetDescField restituisce l'impostazione o il valore corrente di un singolo campo di un record descrittore.
Sintassi
SQLRETURN SQLGetDescField(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLSMALLINT FieldIdentifier,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StringLengthPtr);
Argomenti
DescriptorHandle
[Input] Handle del descrittore.
RecNumber
[Input] Indica il record descrittore da cui l'applicazione cerca informazioni. I record del descrittore sono numerati da 0, con il numero di record 0 come record del segnalibro. Se l'argomento FieldIdentifier indica un campo di intestazione, RecNumber viene ignorato. Se RecNumber è minore o uguale a SQL_DESC_COUNT ma la riga non contiene dati per una colonna o un parametro, una chiamata a SQLGetDescField restituirà i valori predefiniti dei campi. Per altre informazioni, vedere "Inizializzazione dei campi descrittore" in SQLSetDescField.
FieldIdentifier
[Input] Indica il campo del descrittore il cui valore deve essere restituito. Per altre informazioni, vedere la sezione "Argomento FieldIdentifier " in SQLSetDescField.
ValuePtr
[Output] Puntatore a un buffer in cui restituire le informazioni del descrittore. Il tipo di dati dipende dal valore di FieldIdentifier.
Se ValuePtr è di tipo integer, le applicazioni devono usare un buffer di SQLULEN e inizializzare il valore su 0 prima di chiamare questa funzione perché alcuni driver possono scrivere solo il bit inferiore a 32 bit o 16 bit di un buffer e lasciare invariato il bit di ordine superiore.
Se ValuePtr è NULL, StringLengthPtr restituirà comunque il numero totale di byte (escluso il carattere di terminazione null per i dati di tipo carattere) da restituire nel buffer a cui punta ValuePtr.
BufferLength
[Input] Se FieldIdentifier è un campo definito da ODBC e ValuePtr punta a una stringa di caratteri o a un buffer binario, questo argomento deve essere la lunghezza di *ValuePtr. Se FieldIdentifier è un campo definito da ODBC e *ValuePtr è un numero intero, BufferLength viene ignorato. Se il valore in *ValuePtr è di un tipo di dati Unicode (quando si chiama SQLGetDescFieldW), l'argomento BufferLength deve essere un numero pari.
Se FieldIdentifier è un campo definito dal driver, l'applicazione indica la natura del campo in Gestione driver impostando l'argomento BufferLength . BufferLength può avere i valori seguenti:
Se *ValuePtr è un puntatore a una stringa di caratteri, BufferLength è la lunghezza della stringa o SQL_NTS.
Se *ValuePtr è un puntatore a un buffer binario, l'applicazione inserisce il risultato della macro SQL_LEN_BINARY_ATTR(length) in BufferLength. In questo modo viene impostato un valore negativo in BufferLength.
Se *ValuePtr è un puntatore a un valore diverso da una stringa di caratteri o una stringa binaria, BufferLength deve avere il valore SQL_IS_POINTER.
Se *ValuePtr contiene un tipo di dati a lunghezza fissa, BufferLength è SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT o SQL_IS_USMALLINT, se necessario.
StringLengthPtr
[Output] Puntatore al buffer in cui restituire il numero totale di byte (escluso il numero di byte necessari per il carattere di terminazione Null) da restituire in *ValuePtr.
Resi
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_NO_DATA o SQL_INVALID_HANDLE.
SQL_NO_DATA viene restituito se RecNumber è maggiore del numero corrente di record del descrittore.
SQL_NO_DATA viene restituito se DescriptorHandle è un handle IRD e l'istruzione si trova nello stato preparato o eseguito, ma non è stato associato alcun cursore aperto.
Diagnostica
Quando SQLGetDescField restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleTypedi SQL_HANDLE_STMT e handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLGetDescField e ne spiega ognuno nel contesto di questa funzione. La notazione "(DM)" precede le descrizioni di SQLSTATEs restituite da Gestione driver. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.
SQLSTATE | Errore | Descrizione |
---|---|---|
01000 | Avviso generale | Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
01004 | Dati stringa, troncati a destra | Il buffer *ValuePtr non era sufficientemente grande da restituire l'intero campo descrittore, quindi il campo è stato troncato. La lunghezza del campo descrittore non modificato viene restituita in *StringLengthPtr. (La funzione restituisce SQL_SUCCESS_WITH_INFO. |
07009 | Indice descrittore non valido | (DM) L'argomento RecNumber era uguale a 0, l'attributo dell'istruzione SQL_ATTR_USE_BOOKMARK era SQL_UB_OFF e l'argomento DescriptorHandle era un handle IRD. Questo errore può essere restituito per un descrittore allocato in modo esplicito solo se il descrittore è associato a un handle di istruzione. L'argomento FieldIdentifier era un campo record, l'argomento RecNumber era 0 e l'argomento DescriptorHandle era un handle IPD. L'argomento RecNumber è minore di 0. |
08S01 | Errore del collegamento di comunicazione | Collegamento di comunicazione tra il driver e l'origine dati a cui è stato connesso il driver non è riuscito prima del completamento dell'elaborazione della funzione. |
HY000 | Errore generale: | Si è verificato un errore per il quale non è stato specificato SQLSTATE e per il quale non è stato definito alcun SQLSTATE specifico dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nel buffer *MessageText descrive l'errore e la relativa causa. |
HY001 | Errore di allocazione della memoria | Il driver non è riuscito ad allocare la memoria necessaria per supportare l'esecuzione o il completamento della funzione. |
HY007 | Istruzione associata non preparata | DescriptorHandle è stato associato a statementHandle come IRD e l'handle di istruzione associato non è stato preparato o eseguito. |
HY010 | Errore della sequenza di funzioni | (DM) DescriptorHandle è stato associato a un StatementHandle per il quale è stata chiamata una funzione in esecuzione asincrona (non questa) ed era ancora in esecuzione quando questa funzione è stata chiamata. (DM) DescriptorHandle è stato associato a un statementHandle per cui è stato SQL_NEED_DATA chiamato SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos . Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution. (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a DescriptorHandle. Questa funzione asincrona era ancora in esecuzione quando è stata chiamata la funzione SQLGetDescField . |
HY013 | Errore di gestione della memoria | Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente. |
HY021 | Informazioni sul descrittore incoerente | I campi SQL_DESC_TYPE e SQL_DESC_DATETIME_INTERVAL_CODE non formano un tipo SQL ODBC valido, un tipo SQL specifico del driver valido (per IPD) o un tipo ODBC C valido (per API o ARD). |
HY090 | Lunghezza della stringa o del buffer non valida | (DM) *ValuePtr era una stringa di caratteri e BufferLength era minore di zero. |
HY091 | Identificatore di campo del descrittore non valido | FieldIdentifier non era un campo definito da ODBC e non era un valore definito dall'implementazione. FieldIdentifier non è stato definito per DescriptorHandle. |
HY117 | La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. | (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran. |
HYT01 | Il timeout della connessione è scaduto | Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Il driver non supporta questa funzione | (DM) Il driver associato a DescriptorHandle non supporta la funzione. |
Commenti
Un'applicazione può chiamare SQLGetDescField per restituire il valore di un singolo campo di un record descrittore. Una chiamata a SQLGetDescField può restituire l'impostazione di qualsiasi campo in qualsiasi tipo di descrittore, inclusi campi di intestazione, campi di record e campi segnalibro. Un'applicazione può ottenere le impostazioni di più campi negli stessi descrittori o diversi, in ordine arbitrario, effettuando chiamate ripetute a SQLGetDescField. È anche possibile chiamare SQLGetDescField per restituire campi descrittori definiti dal driver.
Per motivi di prestazioni, un'applicazione non deve chiamare SQLGetDescField per un IRD prima di eseguire un'istruzione .
Le impostazioni di più campi che descrivono il nome, il tipo di dati e l'archiviazione dei dati delle colonne o dei parametri possono essere recuperate anche in una singola chiamata a SQLGetDescRec. È possibile chiamare SQLGetStmtAttr per restituire l'impostazione di un singolo campo nell'intestazione del descrittore che è anche un attributo di istruzione. Campi record restituiti o segnalibri sqlColAttribute, SQLDescribeCol e SQLDescribeParam .
Quando un'applicazione chiama SQLGetDescField per recuperare il valore di un campo non definito per un particolare tipo di descrittore, la funzione restituisce SQL_SUCCESS ma il valore restituito per il campo non è definito. Ad esempio, la chiamata a SQLGetDescField per il campo SQL_DESC_NAME o SQL_DESC_NULLABLE di un APD o ARD restituirà SQL_SUCCESS ma un valore non definito per il campo.
Quando un'applicazione chiama SQLGetDescField per recuperare il valore di un campo definito per un particolare tipo di descrittore, ma che non ha ancora un valore predefinito e non è ancora stato impostato, la funzione restituisce SQL_SUCCESS ma il valore restituito per il campo non è definito. Per altre informazioni sull'inizializzazione di campi descrittori e descrizioni dei campi, vedere "Inizializzazione dei campi descrittore" in SQLSetDescField. Per altre informazioni sui descrittori, vedere Descrittori.
Funzioni correlate
Per informazioni su | Vedere |
---|---|
Recupero di più campi descrittore | Funzione SQLGetDescRec |
Impostazione di un singolo campo descrittore | Funzione SQLSetDescField |
Impostazione di più campi descrittori | Funzione SQLSetDescRec |