Funzione SQLGetDescRec

Conformità
Versione introdotta: Conformità agli standard ODBC 3.0: ISO 92

Sommario
SQLGetDescRec restituisce le impostazioni o i valori attuali di più campi di un record descrittore. I campi restituiti descrivono il nome, il tipo di dato e la memorizzazione dei dati di colonne o parametri.

Sintassi

  
SQLRETURN SQLGetDescRec(  
      SQLHDESC        DescriptorHandle,  
      SQLSMALLINT     RecNumber,  
      SQLCHAR *       Name,  
      SQLSMALLINT     BufferLength,  
      SQLSMALLINT *   StringLengthPtr,  
      SQLSMALLINT *   TypePtr,  
      SQLSMALLINT *   SubTypePtr,  
      SQLLEN *        LengthPtr,  
      SQLSMALLINT *   PrecisionPtr,  
      SQLSMALLINT *   ScalePtr,  
      SQLSMALLINT *   NullablePtr);  

Arguments

DescriptorHandle
[Input] Handle descrittore.

RecNumber
[Input] Indica il registro descrittore da cui la domanda cerca informazioni. I record descrittori sono numerati da 1, con il record numero 0 che rappresenta il record segnalibro. L'argomento RecNumber deve essere minore o uguale al valore di SQL_DESC_COUNT. Se RecNumber è minore o uguale a SQL_DESC_COUNT ma la riga non contiene dati per una colonna o parametro, una chiamata a SQLGetDescRec restituirà i valori predefiniti dei campi. (Per ulteriori informazioni, vedi "Inizializzazione dei Campi Descrittori" in SQLSetDescField.)

Nome
[Output] Un puntatore a un buffer in cui restituire il campo SQL_DESC_NAME per il record descrittore.

Se Name è NULL, StringLengthPtr restituirà comunque il numero totale di caratteri (escluso il carattere di null-termination per i dati dei caratteri) disponibili da restituire nel buffer indicato per Name.

BufferLength
[Input] Lunghezza del buffer *Nome , in caratteri.

StringLengthPtr
[Output] Un puntatore a un buffer in cui restituire il numero di caratteri di dati disponibili da restituire nel buffer *Name , escludendo il carattere di terminazione nulla. Se il numero di caratteri era maggiore o uguale a BufferLength, i dati in *Name vengono troncati a BufferLength meno la lunghezza di un carattere a null-termination, e vengono null-terminati dal driver.

TypePtr
[Output] Un puntatore a un buffer in cui restituire il valore del campo SQL_DESC_TYPE per il record descrittore.

SubTypePtr
[Output] Per i record il cui tipo è SQL_DATETIME o SQL_INTERVAL, questo è un puntatore a un buffer in cui restituire il valore del campo SQL_DESC_DATETIME_INTERVAL_CODE.

LengthPtr
[Output] Un puntatore a un buffer in cui restituire il valore del campo SQL_DESC_OCTET_LENGTH per il record descrittore.

PrecisionPtr
[Output] Un puntatore a un buffer in cui restituire il valore del campo SQL_DESC_PRECISION per il record descrittore.

ScalePtr
[Output] Un puntatore a un buffer in cui restituire il valore del campo SQL_DESC_SCALE per il record descrittore.

NullablePtr
[Output] Un puntatore a un buffer in cui restituire il valore del campo SQL_DESC_NULLABLE per il record descrittore.

Returns

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 attuale di record descrittori.

SQL_NO_DATA viene restituito se DescriptorHandle è un handle IRD e l'istruzione è nello stato preparato o eseguito ma non c'era un cursore aperto associato.

Diagnostica

Quando SQLGetDescRec restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, un valore SQLSTATE associato può essere ottenuto chiamando SQLGetDiagRec con un HandleType di SQL_HANDLE_DESC e un Handle di DescriptorHandle. La tabella seguente elenca i valori SQLSTATE tipicamente restituiti da SQLGetDescRec e spiega ciascuno nel contesto di questa funzione; la notazione "(DM)" precede le descrizioni degli stati SQL restituite dal Driver Manager. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.

SQLSTATE Error Description
01000 Avviso generale Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
01004 Dati stringa, troncati a destra Il buffer *Name non era abbastanza grande da restituire l'intero campo descrittore. Pertanto, il campo fu troncato. La lunghezza del campo descrittore non runcato viene restituita in *StringLengthPtr. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
07009 Indice descrittore non valido L'argomento FieldIdentifier era un campo di record, l'argomento RecNumber era impostato a 0, e l'argomento DescriptorHandle era un handle IPD.

(DM) L'argomento RecNumber era impostato a 0, e l'attributo di istruzione SQL_ATTR_USE_BOOKMARKS era impostato a SQL_UB_OFF, e l'argomento DescriptorHandle era un handle IRD.

L'argomento del RecNumber era inferiore a 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 era in grado di allocare la memoria necessaria per supportare l'esecuzione o il completamento della funzione.
HY007 Istruzione associata non preparata DescriptorHandle era associato a un IRD, e il handle associato all'istruzione non era nello stato preparato o eseguito.
HY010 Errore della sequenza di funzioni (DM) DescriptorHandle era associato a un StatementHandle per cui veniva chiamata una funzione asincrona (non questa) e continuava a essere eseguita quando questa funzione veniva chiamata.

(DM) DescriptorHandle era associato a un StatementHandle per cui venivano chiamati e restituiti SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution.

(DM) Una funzione a esecuzione asincrona veniva chiamata per il handle di connessione associato al DescriptorHandle. Questa funzione asincrona era ancora in esecuzione quando veniva chiamato SQLGetDescRec .
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.
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 questa funzione.

Comments

Un'applicazione può chiamare SQLGetDescRec per recuperare i valori dei seguenti campi descrittori per una singola colonna o parametro:

  • SQL_DESC_NAME

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (per documenti il cui tipo è SQL_DATETIME o SQL_INTERVAL)

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PRECISION

  • SQL_DESC_SCALE

  • SQL_DESC_NULLABLE

SQLGetDescRec non recupera i valori dei campi di header.

Un'applicazione può impedire il ritorno dell'impostazione di un campo impostando l'argomento corrispondente al campo a un puntatore nullo.

Quando un'applicazione chiama SQLGetDescRec per recuperare il valore di un campo indefinito per un particolare tipo di descrittore, la funzione restituisce SQL_SUCCESS ma il valore restituito per il campo è indefinito. Ad esempio, chiamare SQLGetDescRec per il campo SQL_DESC_NAME o SQL_DESC_NULLABLE di un APD o ARD restituirà SQL_SUCCESS ma un valore indefinito per il campo.

Quando un'applicazione chiama SQLGetDescRec per recuperare il valore di un campo definito per un particolare tipo di descrittore ma che non ha un valore predefinito e non è ancora stato impostato, la funzione restituisce SQL_SUCCESS ma il valore restituito per il campo non è definito. Per ulteriori informazioni, vedi "Inizializzazione dei Campi Descrittori" in SQLSetDescField.

I valori dei campi possono anche essere recuperati singolarmente tramite una chiamata a SQLGetDescField. Per una descrizione dei campi in un'intestazione o un record di descrittore, vedi SQLSetDescField. Per altre informazioni sui descrittori, vedere Descrittori.

Per informazioni su Vedi
Legare una colonna Funzione SQLBindCol
Legare un parametro Funzione SQLBindParameter
Ottenere un campo descrittore Funzione SQLGetDescField
Impostazione di campi descrittori multipli Funzione SQLSetDescRec