Funzione SQLGetDiagField

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

Riepilogo
SQLGetDiagField restituisce il valore corrente di un campo di un record della struttura dei dati di diagnostica (associata a un handle specificato) che contiene informazioni su errore, avviso e stato.

Sintassi


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

Argomenti

HandleType
[Input] Identificatore del tipo di handle che descrive il tipo di handle per cui è necessaria la diagnostica. I possibili valori sono i seguenti:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN handle viene usato solo da Gestione driver e driver. Le applicazioni non devono usare questo tipo di handle. Per altre informazioni sulle SQL_HANDLE_DBC_INFO_TOKEN, vedere Sviluppo di consapevolezza del pool di connessioni in un driver ODBC.

Handle
[Input] Handle per la struttura dei dati di diagnostica, del tipo indicato da HandleType. Se HandleType è SQL_HANDLE_ENV, Handle può essere un handle di ambiente condiviso o non condiviso.

RecNumber
[Input] Indica il record di stato da cui l'applicazione cerca informazioni. I record di stato sono numerati da 1. Se l'argomento DiagIdentifier indica un campo dell'intestazione di diagnostica, RecNumber viene ignorato. In caso contrario, deve essere maggiore di 0.

DiagIdentifier
[Input] Indica il campo della diagnostica il cui valore deve essere restituito. Per altre informazioni, vedere la sezione "Argomento DiagIdentifier " in "Comments".

DiagInfoPtr
[Output] Puntatore a un buffer in cui restituire le informazioni di diagnostica. Il tipo di dati dipende dal valore di DiagIdentifier. Se DiagInfoPtr è un tipo integer, le applicazioni devono usare un buffer di SQLULEN e inizializzare il valore su 0 prima di chiamare questa funzione, poiché 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 DiagInfoPtr è 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 DiagInfoPtr.

BufferLength
[Input] Se DiagIdentifier è una diagnostica definita da ODBC e DiagInfoPtr punta a una stringa di caratteri o a un buffer binario, questo argomento deve essere la lunghezza di *DiagInfoPtr. Se DiagIdentifier è un campo definito da ODBC e *DiagInfoPtr è un numero intero, BufferLength viene ignorato. Se il valore in *DiagInfoPtr è una stringa Unicode (quando si chiama SQLGetDiagFieldW), l'argomento BufferLength deve essere un numero pari.

Se DiagIdentifier è 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 DiagInfoPtr è un puntatore a una stringa di caratteri, BufferLength è la lunghezza della stringa o SQL_NTS.

  • Se DiagInfoPtr è 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 DiagInfoPtr è un puntatore a un valore diverso da una stringa di caratteri o una stringa binaria, BufferLength deve avere il valore SQL_IS_POINTER.

  • Se *DiagInfoPtr contiene un tipo di dati a lunghezza fissa, BufferLength è SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT o SQL_IS_USMALLINT, in base alle esigenze.

StringLengthPtr
[Output] Puntatore a un buffer in cui restituire il numero totale di byte (escluso il numero di byte necessari per il carattere di terminazione Null) disponibile per restituire in *DiagInfoPtr, per i dati di tipo carattere. Se il numero di byte disponibili per la restituzione è maggiore o uguale a BufferLength, il testo in *DiagInfoPtr viene troncato a BufferLength meno la lunghezza di un carattere di terminazione Null.

Resi

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE o SQL_NO_DATA.

Diagnostica

SQLGetDiagField non registra i record di diagnostica per se stesso. Usa i valori restituiti seguenti per segnalare il risultato della propria esecuzione:

  • SQL_SUCCESS: la funzione ha restituito correttamente informazioni di diagnostica.

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr era troppo piccolo per contenere il campo di diagnostica richiesto. Di conseguenza, i dati nel campo di diagnostica sono stati troncati. Per determinare che si è verificato un troncamento, l'applicazione deve confrontare BufferLength con il numero effettivo di byte disponibili, scritto in *StringLengthPtr.

  • SQL_INVALID_HANDLE: l'handle indicato da HandleType e Handle non è un handle valido.

  • SQL_ERROR: si è verificato uno dei seguenti:

    • L'argomento DiagIdentifier non è uno dei valori validi.

    • L'argomento DiagIdentifier è stato SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE o SQL_DIAG_ROW_COUNT, ma Handle non era un handle di istruzione. Gestione driver restituisce questa diagnostica.

    • L'argomento RecNumber è negativo o 0 quando DiagIdentifier indica un campo da un record di diagnostica. RecNumber viene ignorato per i campi di intestazione.

    • Il valore richiesto era una stringa di caratteri e BufferLength era minore di zero.

    • Quando si usa la notifica asincrona, l'operazione asincrona sull'handle non è stata completata.

  • SQL_NO_DATA: RecNumber è maggiore del numero di record di diagnostica esistenti per l'handle specificato in Handle. La funzione restituisce anche SQL_NO_DATA per qualsiasi recNumber positivo se non sono presenti record di diagnostica per Handle.

Commenti

Un'applicazione chiama in genere SQLGetDiagField per raggiungere uno dei tre obiettivi seguenti:

  1. Per ottenere informazioni di errore o avviso specifiche quando una chiamata di funzione ha restituito SQL_ERROR o SQL_SUCCESS_WITH_INFO (o SQL_NEED_DATA per la funzione SQLBrowseConnect ).

  2. Per determinare il numero di righe nell'origine dati interessate durante l'esecuzione di operazioni di inserimento, eliminazione o aggiornamento con una chiamata a SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos (dal campo di intestazione SQL_DIAG_ROW_COUNT) o per determinare il numero di righe presenti nel cursore aperto corrente, se il driver può fornire queste informazioni (dal campo di intestazione SQL_DIAG_CURSOR_ROW_COUNT).

  3. Per determinare quale funzione è stata eseguita da una chiamata a SQLExecDirect o SQLExecute (dai campi di intestazione SQL_DIAG_DYNAMIC_FUNCTION e SQL_DIAG_DYNAMIC_FUNCTION_CODE).

Qualsiasi funzione ODBC può registrare zero o più record di diagnostica ogni volta che viene chiamata, in modo che un'applicazione possa chiamare SQLGetDiagField dopo qualsiasi chiamata di funzione ODBC. Non esiste alcun limite al numero di record di diagnostica che possono essere archiviati in qualsiasi momento. SQLGetDiagField recupera solo le informazioni di diagnostica più di recente associate alla struttura dei dati di diagnostica specificata nell'argomento Handle . Se l'applicazione chiama una funzione ODBC diversa da SQLGetDiagField o SQLGetDiagRec, tutte le informazioni di diagnostica di una chiamata precedente con lo stesso handle andranno perse.

Un'applicazione può analizzare tutti i record di diagnostica incrementando RecNumber, purché SQLGetDiagField restituisca SQL_SUCCESS. Il numero di record di stato è indicato nel campo dell'intestazione SQL_DIAG_NUMBER. Le chiamate a SQLGetDiagField non sono distruttive per i campi di intestazione e record. L'applicazione può chiamare di nuovo SQLGetDiagField in un secondo momento per recuperare un campo da un record, purché una funzione diversa dalle funzioni di diagnostica non sia stata chiamata nel frattempo, che inserirebbe i record sullo stesso handle.

Un'applicazione può chiamare SQLGetDiagField per restituire qualsiasi campo di diagnostica in qualsiasi momento, ad eccezione di SQL_DIAG_CURSOR_ROW_COUNT o SQL_DIAG_ROW_COUNT, che restituirà SQL_ERROR se Handle non è un handle di istruzione. Se un altro campo di diagnostica non è definito, la chiamata a SQLGetDiagField restituirà SQL_SUCCESS (purché non venga rilevata alcuna altra diagnostica) e viene restituito un valore non definito per il campo.

Per altre informazioni, vedere Uso di SQLGetDiagRec e SQLGetDiagField e Implementazione di SQLGetDiagRec e SQLGetDiagField.

La chiamata di un'API diversa da quella eseguita in modo asincrono genererà "Errore di sequenza di funzioni". Tuttavia, non è possibile recuperare il record di errore prima del completamento dell'operazione asincrona.

Argomento HandleType

A ogni tipo di handle possono essere associate informazioni di diagnostica. L'argomento HandleType indica il tipo di handle.

Alcuni campi di intestazione e record non possono essere restituiti per handle di ambiente, connessione, istruzione e descrittore. Gli handle per i quali un campo non è applicabile sono indicati nelle sezioni "Campi intestazione" e "Campi record" seguenti.

Se HandleType è SQL_HANDLE_ENV, Handle può essere un handle di ambiente condiviso o non condiviso.

Nessun campo di diagnostica dell'intestazione specifico del driver deve essere associato a un handle di ambiente.

Gli unici campi di intestazione di diagnostica definiti per un handle descrittore sono SQL_DIAG_NUMBER e SQL_DIAG_RETURNCODE.

Argomento DiagIdentifier

Questo argomento indica l'identificatore del campo richiesto dalla struttura dei dati di diagnostica. Se RecNumber è maggiore o uguale a 1, i dati nel campo descrivono le informazioni di diagnostica restituite da una funzione. Se RecNumber è 0, il campo si trova nell'intestazione della struttura dei dati di diagnostica e pertanto contiene i dati relativi alla chiamata di funzione che ha restituito le informazioni di diagnostica, non alle informazioni specifiche.

I driver possono definire campi di intestazione e record specifici del driver nella struttura dei dati di diagnostica.

Un'applicazione ODBC 3*.x* che utilizza un driver ODBC 2*.x* potrà chiamare SQLGetDiagField solo con un argomento DiagIdentifier di SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME o SQL_DIAG_SQLSTATE. Tutti gli altri campi di diagnostica restituiranno SQL_ERROR.

Campi intestazione

I campi di intestazione elencati nella tabella seguente possono essere inclusi nell'argomento DiagIdentifier .

DiagIdentifier Tipo restituito Resi
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN Questo campo contiene il numero di righe nel cursore. La semantica dipende dai tipi di informazioni SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 e SQL_STATIC_CURSOR_ATTRIBUTES2, che indicano quali conteggi di righe sono disponibili per ogni tipo di cursore (nei bit SQL_CA2_CRC_EXACT e SQL_CA2_CRC_APPROXIMATE).

Il contenuto di questo campo viene definito solo per gli handle di istruzione e solo dopo la chiamata di SQLExecute, SQLExecDirect o SQLMoreResults . La chiamata a SQLGetDiagField con un DiagIdentifier di SQL_DIAG_CURSOR_ROW_COUNT diverso da un handle di istruzione restituirà SQL_ERROR.
SQL_DIAG_DYNAMIC_FUNCTION SQLCHAR * Si tratta di una stringa che descrive l'istruzione SQL eseguita dalla funzione sottostante. Per valori specifici, vedere "Valori dei campi della funzione dinamica", più avanti in questa sezione. Il contenuto di questo campo viene definito solo per gli handle di istruzione e solo dopo una chiamata a SQLExecute, SQLExecDirect o SQLMoreResults. La chiamata a SQLGetDiagField con un DiagIdentifier di SQL_DIAG_DYNAMIC_FUNCTION diverso da un handle di istruzione restituirà SQL_ERROR. Il valore di questo campo non è definito prima di una chiamata a SQLExecute o SQLExecDirect.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER Si tratta di un codice numerico che descrive l'istruzione SQL eseguita dalla funzione sottostante. Per un valore specifico, vedere "Valori dei campi della funzione dinamica", più avanti in questa sezione. Il contenuto di questo campo viene definito solo per gli handle di istruzione e solo dopo una chiamata a SQLExecute, SQLExecDirect o SQLMoreResults. La chiamata a SQLGetDiagField con un DiagIdentifier di SQL_DIAG_DYNAMIC_FUNCTION_CODE diverso da un handle di istruzione restituirà SQL_ERROR. Il valore di questo campo non è definito prima di una chiamata a SQLExecute o SQLExecDirect.
SQL_DIAG_NUMBER SQLINTEGER Numero di record di stato disponibili per l'handle specificato.
SQL_DIAG_RETURNCODE SQLRETURN Codice restituito dalla funzione. Per un elenco dei codici restituiti, vedere Codici restituiti. Il driver non deve implementare SQL_DIAG_RETURNCODE; viene sempre implementato da Gestione driver. Se non è stata ancora chiamata alcuna funzione nell'handle, SQL_SUCCESS verrà restituita per SQL_DIAG_RETURNCODE.
SQL_DIAG_ROW_COUNT SQLLEN Numero di righe interessate da un inserimento, un'eliminazione o un aggiornamento eseguiti da SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos. È definito dal driver dopo l'esecuzione di una specifica del cursore. Il contenuto di questo campo è definito solo per gli handle di istruzione. La chiamata a SQLGetDiagField con un DiagIdentifier di SQL_DIAG_ROW_COUNT diverso da un handle di istruzione restituirà SQL_ERROR. I dati in questo campo vengono restituiti anche nell'argomento RowCountPtr di SQLRowCount. I dati in questo campo vengono reimpostati dopo ogni chiamata di funzione non diagnostica, mentre il conteggio delle righe restituito da SQLRowCount rimane invariato fino a quando l'istruzione non viene reimpostata sullo stato preparato o allocato.

Campi record

I campi di record elencati nella tabella seguente possono essere inclusi nell'argomento DiagIdentifier .

DiagIdentifier Tipo restituito Resi
SQL_DIAG_CLASS_ORIGIN SQLCHAR * Stringa che indica il documento che definisce la parte della classe del valore SQLSTATE in questo record. Il valore è "ISO 9075" per tutte le STATISTICHE SQL definite dall'interfaccia Open Group e ISO call-level. Per SQLSTATEs specifici di ODBC (tutti quelli la cui classe SQLSTATE è "IM"), il relativo valore è "ODBC 3.0".
SQL_DIAG_COLUMN_NUMBER SQLINTEGER Se il campo SQL_DIAG_ROW_NUMBER è un numero di riga valido in un set di righe o un set di parametri, questo campo contiene il valore che rappresenta il numero di colonna nel set di risultati o il numero di parametro nel set di parametri. I numeri di colonna del set di risultati iniziano sempre da 1; se questo record di stato si riferisce a una colonna di segnalibro, il campo può essere zero. I numeri dei parametri iniziano da 1. Ha il valore SQL_NO_COLUMN_NUMBER se il record di stato non è associato a un numero di colonna o a un numero di parametro. Se il driver non è in grado di determinare il numero di colonna o il numero di parametro a cui è associato questo record, questo campo ha il valore SQL_COLUMN_NUMBER_UNKNOWN.

Il contenuto di questo campo è definito solo per gli handle di istruzione.
SQL_DIAG_CONNECTION_NAME SQLCHAR * Stringa che indica il nome della connessione a cui si riferisce il record di diagnostica. Questo campo è definito dal driver. Per le strutture di dati di diagnostica associate all'handle di ambiente e per la diagnostica che non sono correlate ad alcuna connessione, questo campo è una stringa di lunghezza zero.
SQL_DIAG_MESSAGE_TEXT SQLCHAR * Messaggio informativo sull'errore o sull'avviso. Questo campo è formattato come descritto in Messaggi di diagnostica. Non esiste una lunghezza massima per il testo del messaggio di diagnostica.
SQL_DIAG_NATIVE SQLINTEGER Codice di errore nativo specifico dell'origine dati/driver. Se non è presente codice di errore nativo, il driver restituisce 0.
SQL_DIAG_ROW_NUMBER SQLLEN Questo campo contiene il numero di riga nel set di righe o il numero di parametro nel set di parametri, a cui è associato il record di stato. I numeri di riga e i numeri di parametro iniziano con 1. Questo campo ha il valore SQL_NO_ROW_NUMBER se questo record di stato non è associato a un numero di riga o a un numero di parametro. Se il driver non è in grado di determinare il numero di riga o il numero di parametro a cui è associato questo record, questo campo ha il valore SQL_ROW_NUMBER_UNKNOWN.

Il contenuto di questo campo è definito solo per gli handle di istruzione.
SQL_DIAG_SERVER_NAME SQLCHAR * Stringa che indica il nome del server a cui si riferisce il record di diagnostica. Equivale al valore restituito per una chiamata a SQLGetInfo con l'opzione SQL_DATA_SOURCE_NAME. Per le strutture di dati di diagnostica associate all'handle di ambiente e per la diagnostica che non sono correlate ad alcun server, questo campo è una stringa di lunghezza zero.
SQL_DIAG_SQLSTATE SQLCHAR * Codice di diagnostica SQLSTATE di cinque caratteri. Per altre informazioni, vedere SQLSTATEs.
SQL_DIAG_SUBCLASS_ORIGIN SQLCHAR * Stringa con lo stesso formato e gli stessi valori validi di SQL_DIAG_CLASS_ORIGIN, che identifica la parte di definizione della parte della sottoclasse del codice SQLSTATE. SqlSTATES specifico di ODBC per il quale viene restituito "ODBC 3.0" includono quanto segue:

01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S222, HY095, HY097, HY098, HY099, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012.

Valori dei campi della funzione dinamica

Nella tabella seguente vengono descritti i valori di SQL_DIAG_DYNAMIC_FUNCTION e SQL_DIAG_DYNAMIC_FUNCTION_CODE che si applicano a ogni tipo di istruzione SQL eseguita da una chiamata a SQLExecute o SQLExecDirect. Il driver può aggiungere valori definiti dal driver a quelli elencati.

SQL statement

Eseguito
Valore di

SQL_DIAG_DYNAMIC_FUNCTION
Valore di

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "ALTER DOMAIN" SQL_DIAG_ALTER_DOMAIN
alter-table-statement "ALTER TABLE" SQL_DIAG_ALTER_TABLE
definizione di asserzione "CREATE ASSERTION" SQL_DIAG_CREATE_ASSERTION
definizione del set di caratteri "CREATE CHARACTER SET" SQL_DIAG_CREATE_CHARACTER_SET
definizione delle regole di confronto "CREATE COLLATION" SQL_DIAG_CREATE_COLLATION
domainn-definition "CREATE DOMAIN" SQL_DIAG_CREATE_DOMAIN
create-index-statement "CREATE INDEX" SQL_DIAG_CREATE_INDEX
create-table-statement "CREATE TABLE" SQL_DIAG_CREATE_TABLE
create-view-statement "CREATE VIEW" SQL_DIAG_CREATE_VIEW
specifica cursore "SELECT CURSOR" SQL_DIAG_SELECT_CURSOR
delete-statement-positioned "DYNAMIC DELETE CURSOR" SQL_DIAG_DYNAMIC_DELETE_CURSOR
delete-statement-searched "DELETE WHERE" SQL_DIAG_DELETE_WHERE
drop-assertion-statement "DROP ASSERTION" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "DROP CHARACTER SET" SQL_DIAG_DROP_CHARACTER_SET
drop-collation-statement "DROP COLLATION" SQL_DIAG_DROP_COLLATION
drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
drop-index-statement "DROP INDEX" SQL_DIAG_DROP_INDEX
drop-schema-statement "DROP SCHEMA" SQL_DIAG_DROP_SCHEMA
drop-table-statement "DROP TABLE" SQL_DIAG_DROP_TABLE
drop-translation-statement "DROP TRANSLATION" SQL_DIAG_DROP_TRANSLATION
drop-view-statement "DROP VIEW" SQL_DIAG_DROP_VIEW
grantstatement "GRANT" SQL_DIAG_GRANT
insert-statement "INSERT" SQL_DIAG_INSERT
ODBC-procedure-extension "CALL" SQL_DIAG_ CALL
revoke-statement "REVOKE" SQL_DIAG_REVOKE
definizione dello schema "CREATE SCHEMA" SQL_DIAG_CREATE_SCHEMA
translation-definition "CREATE TRANSLATION" SQL_DIAG_CREATE_TRANSLATION
update-statement-positioned "DYNAMIC UPDATE CURSOR" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
update-statement-searched "UPDATE WHERE" SQL_DIAG_UPDATE_WHERE
Sconosciuto stringa vuota SQL_DIAG_UNKNOWN_STATEMENT

Sequenza di record di stato

I record di stato vengono posizionati in una sequenza in base al numero di riga e al tipo della diagnostica. Gestione driver determina l'ordine finale in cui restituire i record di stato generati. Il driver determina l'ordine finale in cui restituire i record di stato generati.

Se i record di diagnostica vengono registrati sia da Gestione driver che dal driver, Gestione driver è responsabile dell'ordinamento.

Se sono presenti due o più record di stato, la sequenza dei record viene determinata per prima in base al numero di riga. Le regole seguenti si applicano alla determinazione della sequenza di record di diagnostica per riga:

  • I record che non corrispondono ad alcuna riga vengono visualizzati davanti ai record che corrispondono a una determinata riga, perché SQL_NO_ROW_NUMBER è definito come -1.

  • I record per i quali il numero di riga è sconosciuto vengono visualizzati davanti a tutti gli altri record, perché SQL_ROW_NUMBER_UNKNOWN è definito come -2.

  • Per tutti i record relativi a righe specifiche, i record vengono ordinati in base al valore nel campo SQL_DIAG_ROW_NUMBER. Vengono elencati tutti gli errori e gli avvisi della prima riga interessata, quindi tutti gli errori e gli avvisi della riga successiva interessati e così via.

Nota

Gestione driver ODBC 3*.x* non ordina i record di stato nella coda di diagnostica se SQLSTATE 01S01 (errore nella riga) viene restituito da un driver ODBC 2*.x* o se SQLSTATE 01S01 (errore in riga) viene restituito da un driver ODBC 3*.x* quando SQLExtendedFetch viene chiamato o SQLSetPos viene chiamato su un cursore posizionato con SQLExtendedFetch.

All'interno di ogni riga o per tutti i record che non corrispondono a una riga o per cui il numero di riga è sconosciuto oppure per tutti i record con un numero di riga uguale a SQL_NO_ROW_NUMBER, il primo record elencato viene determinato utilizzando un set di regole di ordinamento. Dopo il primo record, l'ordine degli altri record che interessano una riga non è definito. Un'applicazione non può presupporre che gli errori precedono gli avvisi dopo il primo record. Le applicazioni devono analizzare la struttura completa dei dati di diagnostica per ottenere informazioni complete su una chiamata non riuscita a una funzione.

Le regole seguenti vengono utilizzate per determinare il primo record all'interno di una riga. Il record con il rango più alto è il primo record. L'origine di un record (Gestione driver, driver, gateway e così via) non viene considerata quando si classificano i record.

  • I record di stato degli errori che descrivono gli errori hanno il rango più alto. Le regole seguenti vengono applicate agli errori di ordinamento:

    • Record che indicano un errore di transazione o un possibile errore di transazione hanno bevuto tutti gli altri record.

    • Se due o più record descrivono la stessa condizione di errore, SQLSTATEs definiti dalla specifica dell'interfaccia della riga di comando del gruppo open (classi da 03 a HZ) hanno superato ODBC e SQLSTATEs definiti dal driver.

  • I record di stato No Data Values definiti dall'implementazione che descrivono i valori No Data definiti dal driver (classe 02) hanno il secondo rango più alto.

  • I record di stato degli avvisi che descrivono gli avvisi (classe 01) hanno il rango più basso. Se due o più record descrivono la stessa condizione di avviso, gli avvisi SQLSTATEs definiti dalla specifica dell'interfaccia della riga di comando open group hanno outrank ODBC-defined e SQLSTATEs definiti dal driver.

Per informazioni su Vedere
Recupero di più campi di una struttura di dati di diagnostica Funzione SQLGetDiagRec

Vedi anche

Riferimento API ODBC
File di intestazione ODBC