Condividi tramite


Funzione SQLSetDescRec

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

Riepilogo
La funzione SQLSetDescRec imposta più campi descrittori che influiscono sul tipo di dati e sul buffer associati a una colonna o ai dati dei parametri.

Sintassi

  
SQLRETURN SQLSetDescRec(  
      SQLHDESC      DescriptorHandle,  
      SQLSMALLINT   RecNumber,  
      SQLSMALLINT   Type,  
      SQLSMALLINT   SubType,  
      SQLLEN        Length,  
      SQLSMALLINT   Precision,  
      SQLSMALLINT   Scale,  
      SQLPOINTER    DataPtr,  
      SQLLEN *      StringLengthPtr,  
      SQLLEN *      IndicatorPtr);  

Argomenti

DescriptorHandle
[Input] Handle del descrittore. Questo non deve essere un handle IRD.

RecNumber
[Input] Indica il record descrittore che contiene i campi da impostare. I record del descrittore sono numerati da 0, con il numero di record 0 come record del segnalibro. Questo argomento deve essere uguale o maggiore di 0. Se RecNumber è maggiore del valore di SQL_DESC_COUNT, SQL_DESC_COUNTis modificato nel valore di RecNumber.

Tipo
[Input] Valore a cui impostare il campo SQL_DESC_TYPE per il record descrittore.

Sottotipo
[Input] Per i record il cui tipo è SQL_DATETIME o SQL_INTERVAL, si tratta del valore a cui impostare il campo SQL_DESC_DATETIME_INTERVAL_CODE.

Lunghezza
[Input] Valore a cui impostare il campo SQL_DESC_OCTET_LENGTH per il record descrittore.

Precisione
[Input] Valore a cui impostare il campo SQL_DESC_PRECISION per il record descrittore.

Ridimensiona
[Input] Valore a cui impostare il campo SQL_DESC_SCALE per il record descrittore.

DataPtr
[Input o output posticipato] Valore a cui impostare il campo SQL_DESC_DATA_PTR per il record descrittore. DataPtr può essere impostato su un puntatore Null.

L'argomento DataPtr può essere impostato su un puntatore Null per impostare il campo SQL_DESC_DATA_PTR su un puntatore Null. Se l'handle nell'argomento DescriptorHandle è associato a un ARD, verrà annullata l'associazione della colonna.

StringLengthPtr
[Input o output posticipato] Valore a cui impostare il campo SQL_DESC_OCTET_LENGTH_PTR per il record del descrittore. StringLengthPtr può essere impostato su un puntatore Null per impostare il campo SQL_DESC_OCTET_LENGTH_PTR su un puntatore Null.

IndicatorPtr
[Input o output posticipato] Valore a cui impostare il campo SQL_DESC_INDICATOR_PTR per il record descrittore. IndicatorPtr può essere impostato su un puntatore Null per impostare il campo SQL_DESC_INDICATOR_PTR su un puntatore Null.

Resi

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnostica

Quando SQLSetDescRec restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleTypedi SQL_HANDLE_DESC e handle di descrittoreHandle. La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLSetDescRec e spiega ognuno di essi 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.
07009 Indice descrittore non valido L'argomento RecNumber è stato impostato su 0 e il DescrittoreHandle ha fatto riferimento a un handle IPD.

L'argomento RecNumber è minore di 0.

L'argomento RecNumber è maggiore del numero massimo di colonne o parametri che l'origine dati può supportare e l'argomento DescriptorHandle è un oggetto APD, IPD o ARD.

L'argomento RecNumber è uguale a 0 e l'argomento DescriptorHandle fa riferimento a un APD allocato in modo implicito. Questo errore non si verifica con un descrittore dell'applicazione allocato in modo esplicito perché non è noto se un descrittore di applicazione allocato in modo esplicito è un descrittore APD o ARD fino all'ora di esecuzione.
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 memoria necessaria per supportare l'esecuzione o il completamento della funzione.
HY010 Errore della sequenza di funzioni (DM) Il descrittoreHandle è stato associato a un StatementHandle per il quale è stata chiamata una funzione in esecuzione asincrona (non questa) ed era ancora in esecuzione quando è stata chiamata questa funzione.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per statementHandlecon cui è stato associato il descrittoreHandle e restituito SQL_NEED_DATA. 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 aynchronous era ancora in esecuzione quando è stata chiamata la funzione SQLSetDescRec .

(DM) SQLExecute, SQLExecDirect o SQLMoreResults è stato chiamato per uno degli handle di istruzione associati a DescriptorHandle e restituito SQL_PARAM_DATA_AVAILABLE. Questa funzione è stata chiamata prima del recupero dei dati per tutti i parametri trasmessi.
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.
HY016 Impossibile modificare un descrittore di riga di implementazione L'argomento DescriptorHandle è stato associato a un oggetto IRD.
HY021 Informazioni sul descrittore incoerente Il campo Tipo o qualsiasi altro campo associato al campo SQL_DESC_TYPE nel descrittore non è valido o coerente.

Le informazioni del descrittore controllate durante un controllo coerenza non sono coerenti. Vedere "Verifiche di coerenza" più avanti in questa sezione.
HY090 Lunghezza della stringa o del buffer non valida (DM) Il driver era un driver ODBC 2.x , il descrittore era un ARD, l'argomento ColumnNumber era impostato su 0 e il valore specificato per l'argomento BufferLength non era uguale a 4.
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 SQLSetDescRec per impostare i campi seguenti per una singola colonna o parametro:

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (per i record il cui tipo è SQL_DATETIME o 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

Nota

Se una chiamata a SQLSetDescRec ha esito negativo, il contenuto del record descrittore identificato dall'argomento RecNumber non è definito.

Quando si associa una colonna o un parametro, SQLSetDescRec consente di modificare più campi che influiscono sull'associazione senza chiamare SQLBindCol o SQLBindParameter o effettuare più chiamate a SQLSetDescField. SQLSetDescRec può impostare campi in un descrittore non attualmente associato a un'istruzione . Si noti che SQLBindParameter imposta più campi rispetto a SQLSetDescRec, può impostare campi sia in un APD che in un IPD in una chiamata e non richiede un handle descrittore.

Nota

L'attributo di istruzione SQL_ATTR_USE_BOOKMARKS deve essere sempre impostato prima di chiamare SQLSetDescRec con un argomento RecNumber pari a 0 per impostare i campi del segnalibro. Anche se questo non è obbligatorio, è fortemente consigliato.

Controlli di coerenza

Un controllo di coerenza viene eseguito automaticamente dal driver ogni volta che un'applicazione imposta il campo SQL_DESC_DATA_PTR di un APD, ARD o IPD. Se uno dei campi non è coerente con altri campi, SQLSetDescRec restituirà SQLSTATE HY021 (informazioni del descrittore incoerente).

Ogni volta che un'applicazione imposta il campo SQL_DESC_DATA_PTR di un oggetto APD, ARD o IPD, il driver verifica che il valore del campo SQL_DESC_TYPE e i valori applicabili a tale campo SQL_DESC_TYPE siano validi e coerenti. Questo controllo viene sempre eseguito quando viene chiamato SQLBindParameter o SQLBindCol o quando SQLSetDescRec viene chiamato per un APD, ARD o IPD. Questa verifica coerenza include i controlli seguenti sui campi del descrittore:

  • Il campo SQL_DESC_TYPE deve essere uno dei tipi ODBC C o SQL validi o un tipo SQL specifico del driver. Il campo SQL_DESC_CONCISE_TYPE deve essere uno dei tipi ODBC C o SQL validi oppure un tipo C o SQL specifico del driver, inclusi i tipi datetime e interval concisi.

  • Se il campo del record SQL_DESC_TYPE è SQL_DATETIME o SQL_INTERVAL, il campo SQL_DESC_DATETIME_INTERVAL_CODE deve essere uno dei codici datetime o interval validi. Vedere la descrizione del campo SQL_DESC_DATETIME_INTERVAL_CODE in SQLSetDescField.

  • Se il campo SQL_DESC_TYPE indica un tipo numerico, i campi SQL_DESC_PRECISION e SQL_DESC_SCALE vengono verificati come validi.

  • Se il campo SQL_DESC_CONCISE_TYPE è un tipo di dati time o timestamp, un tipo di intervallo con un componente secondi o uno dei tipi di dati intervallo con un componente time, il campo SQL_DESC_PRECISION viene verificato come una precisione di secondi valida.

  • Se il SQL_DESC_CONCISE_TYPE è un tipo di dati interval, il campo SQL_DESC_DATETIME_INTERVAL_PRECISION viene verificato che sia un valore di precisione iniziale intervallo valido.

Il campo SQL_DESC_DATA_PTR di un IPD non è in genere impostato; Tuttavia, un'applicazione può eseguire questa operazione per forzare una verifica coerenza dei campi IPD. Non è possibile eseguire un controllo di coerenza su un IRD. Il valore su cui il campo SQL_DESC_DATA_PTR dell'IPD non è effettivamente archiviato e non può essere recuperato da una chiamata a SQLGetDescField o SQLGetDescRec. L'impostazione viene eseguita solo per forzare la verifica coerenza.

Per informazioni su Vedere
Associazione di una colonna Funzione SQLBindCol
Associazione di un parametro Funzione SQLBindParameter
Recupero di un singolo campo descrittore Funzione SQLGetDescField
Recupero di più campi descrittore Funzione SQLGetDescRec
Impostazione di campi di descrittore singolo Funzione SQLSetDescField

Vedi anche

Riferimento API ODBC
File di intestazione ODBC