SQLGetDiagField, functie
conformance
Versie geïntroduceerd: NALEVING van ODBC 3.0-standaarden: ISO 92
Samenvattings-
SQLGetDiagField retourneert de huidige waarde van een veld van een record van de structuur van diagnostische gegevens (gekoppeld aan een opgegeven ingang) die fout-, waarschuwings- en statusgegevens bevat.
Syntaxis
SQLRETURN SQLGetDiagField(
SQLSMALLINT HandleType,
SQLHANDLE Handle,
SQLSMALLINT RecNumber,
SQLSMALLINT DiagIdentifier,
SQLPOINTER DiagInfoPtr,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr);
Argumenten
HandleType-
[Invoer] Een handletype-id die het type ingang beschrijft waarvoor diagnostische gegevens vereist zijn. Dit moet een van de volgende zijn:
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN ingang wordt alleen gebruikt door Driver Manager en stuurprogramma. Toepassingen mogen dit handletype niet gebruiken. Zie Ontwikkelen Connection-Pool Awareness in een ODBC-stuurprogrammavoor meer informatie over SQL_HANDLE_DBC_INFO_TOKEN.
verwerken
[Invoer] Een ingang voor de structuur van diagnostische gegevens, van het type dat wordt aangegeven door HandleType. Als HandleType is SQL_HANDLE_ENV, kan Handle een gedeelde of een niet-gedeelde omgevingshandgreep zijn.
RecNumber
[Invoer] Geeft de statusrecord aan waaruit de toepassing informatie zoekt. Statusrecords worden genummerd van 1. Als het argument DiagIdentifier een veld van de diagnostische header aangeeft, wordt RecNumber genegeerd. Als dat niet het geval is, moet het meer dan 0 zijn.
DiagIdentifier-
[Invoer] Geeft het veld van de diagnose aan waarvan de waarde moet worden geretourneerd. Zie de sectie 'DiagIdentifier Argument' in 'Opmerkingen' voor meer informatie.
DiagInfoPtr-
[Uitvoer] Wijs een buffer aan waarin de diagnostische gegevens moeten worden geretourneerd. Het gegevenstype is afhankelijk van de waarde van DiagIdentifier. Als DiagInfoPtr- een geheel getal is, moeten toepassingen een buffer van SQLULEN gebruiken en de waarde initialiseren tot 0 voordat deze functie wordt aangeroepen, omdat sommige stuurprogramma's mogelijk alleen de lagere 32-bits of 16-bits van een buffer schrijven en de hogere volgorde ongewijzigd laten.
Als DiagInfoPtr- NULL is, retourneert StringLengthPtr- nog steeds het totale aantal bytes (met uitzondering van het null-beëindigingsteken voor tekengegevens) dat beschikbaar is in de buffer die wordt verwezen door DiagInfoPtr-.
BufferLength-
[Invoer] Als DiagIdentifier- een door ODBC gedefinieerde diagnostische gegevens is en DiagInfoPtr verwijst naar een tekenreeks of een binaire buffer, moet dit argument de lengte zijn van *DiagInfoPtr-. Als DiagIdentifier- een door ODBC gedefinieerd veld is en *DiagInfoPtr- een geheel getal is, wordt BufferLength- genegeerd. Als de waarde in *DiagInfoPtr- een Unicode-tekenreeks is (bij het aanroepen van SQLGetDiagFieldW), moet het argument BufferLength een even getal zijn.
Als DiagIdentifier- een door het stuurprogramma gedefinieerd veld is, geeft de toepassing de aard van het veld aan op Driver Manager door het argument BufferLength in te stellen. BufferLength- kunnen de volgende waarden hebben:
Als DiagInfoPtr- een aanwijzer is naar een tekenreeks, is BufferLength de lengte van de tekenreeks of SQL_NTS.
Als DiagInfoPtr- een aanwijzer naar een binaire buffer is, plaatst de toepassing het resultaat van de macro SQL_LEN_BINARY_ATTR(lengte) in BufferLength-. Hiermee wordt een negatieve waarde in BufferLength-geplaatst.
Als DiagInfoPtr- een andere waarde is dan een tekenreeks of binaire tekenreeks, moet BufferLength- de waarde hebben SQL_IS_POINTER.
Als *DiagInfoPtr- een gegevenstype met een vaste lengte bevat, wordt BufferLength- SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT of SQL_IS_USMALLINT, indien van toepassing.
StringLengthPtr-
[Uitvoer] Wijs een buffer aan waarin het totale aantal bytes (met uitzondering van het aantal bytes dat is vereist voor het teken null-beëindiging) beschikbaar is om te retourneren in *DiagInfoPtr, voor tekengegevens. Als het aantal beschikbare bytes groter is dan of gelijk is aan BufferLength-, wordt de tekst in *DiagInfoPtr- afgekapt tot BufferLength min de lengte van een null-beëindigingsteken.
Retourneert
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE of SQL_NO_DATA.
Diagnostiek
SQLGetDiagField- plaatst geen diagnostische records voor zichzelf. Hierbij worden de volgende retourwaarden gebruikt om het resultaat van een eigen uitvoering te rapporteren:
SQL_SUCCESS: De functie heeft diagnostische gegevens geretourneerd.
SQL_SUCCESS_WITH_INFO: *DiagInfoPtr- was te klein om het aangevraagde diagnostische veld te bevatten. Daarom zijn de gegevens in het diagnostische veld afgekapt. Om te bepalen dat er een afkapping is opgetreden, moet de toepassing BufferLength- vergelijken met het werkelijke aantal beschikbare bytes, dat wordt geschreven naar *StringLengthPtr.
SQL_INVALID_HANDLE: De ingang die wordt aangegeven door HandleType en Handle was geen geldige ingang.
SQL_ERROR: Er is een van de volgende gebeurtenissen opgetreden:
Het argument DiagIdentifier was geen van de geldige waarden.
Het argument DiagIdentifier is SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE of SQL_DIAG_ROW_COUNT, maar Handle was geen instructiegreep. (Driver Manager retourneert deze diagnose.)
Het argument RecNumber was negatief of 0 toen DiagIdentifier een veld uit een diagnostische record aangaf. RecNumber wordt genegeerd voor koptekstvelden.
De aangevraagde waarde was een tekenreeks en BufferLength kleiner was dan nul.
Bij het gebruik van asynchrone melding is de asynchrone bewerking op de ingang niet voltooid.
SQL_NO_DATA: RecNumber was groter dan het aantal diagnostische records dat bestond voor de ingang die is opgegeven in Handle. De functie retourneert ook SQL_NO_DATA voor positieve RecNumber als er geen diagnostische records zijn voor Handle.
Opmerkingen
Een toepassing roept doorgaans SQLGetDiagField- aan om een van de volgende drie doelen te bereiken:
Specifieke fout- of waarschuwingsgegevens verkrijgen wanneer een functieaanroep SQL_ERROR of SQL_SUCCESS_WITH_INFO (of SQL_NEED_DATA voor de SQLBrowseConnect- functie) heeft geretourneerd.
Om het aantal rijen in de gegevensbron te bepalen dat is beïnvloed bij het invoegen, verwijderen of bijwerken van bewerkingen zijn uitgevoerd met een aanroep naar SQLExecute, SQLExecDirect, SQLBulkOperationsof SQLSetPos (uit het veld SQL_DIAG_ROW_COUNT koptekst) of om het aantal rijen te bepalen dat in de huidige geopende cursor aanwezig is, als het stuurprogramma deze informatie kan opgeven (uit het veld SQL_DIAG_CURSOR_ROW_COUNT koptekst).
Om te bepalen welke functie is uitgevoerd door een aanroep naar SQLExecDirect- of SQLExecute- (uit de SQL_DIAG_DYNAMIC_FUNCTION- en SQL_DIAG_DYNAMIC_FUNCTION_CODE koptekstvelden).
Elke ODBC-functie kan elke keer dat deze wordt aangeroepen nul of meer diagnostische records posten, zodat een toepassing SQLGetDiagField na een ODBC-functieaanroep kan aanroepen. Er is geen limiet voor het aantal diagnostische records dat op elk gewenst moment kan worden opgeslagen. SQLGetDiagField haalt alleen de diagnostische gegevens op die het laatst zijn gekoppeld aan de structuur van de diagnostische gegevens die is opgegeven in het argument Handle. Als de toepassing een andere ODBC-functie aanroept dan SQLGetDiagField of SQLGetDiagRec-, gaan diagnostische gegevens uit een vorige aanroep met dezelfde ingang verloren.
Een toepassing kan alle diagnostische records scannen door RecNumberte verhogen, zolang SQLGetDiagField SQL_SUCCESS retourneert. Het aantal statusrecords wordt aangegeven in het veld SQL_DIAG_NUMBER koptekst. Aanroepen naar SQLGetDiagField- zijn niet destructief voor de header- en recordvelden. De toepassing kan SQLGetDiagField later opnieuw aanroepen om een veld op te halen uit een record, zolang een andere functie dan de diagnostische functies in de tussentijd niet is aangeroepen, waardoor records op dezelfde ingang zouden worden geplaatst.
Een toepassing kan SQLGetDiagField aanroepen om elk diagnostisch veld op elk gewenst moment te retourneren, met uitzondering van SQL_DIAG_CURSOR_ROW_COUNT of SQL_DIAG_ROW_COUNT, die SQL_ERROR retourneert als handle geen instructiehandgreep is. Als een ander diagnostisch veld niet is gedefinieerd, retourneert de aanroep naar SQLGetDiagField- SQL_SUCCESS (mits er geen andere diagnose is opgetreden) en wordt er een niet-gedefinieerde waarde geretourneerd voor het veld.
Zie Using SQLGetDiagRec and SQLGetDiagField and Implementing SQLGetDiagRec and SQLGetDiagFieldvoor meer informatie.
Als u een andere API aanroept dan de API die asynchroon wordt uitgevoerd, wordt hy010 'functiereeksfout' gegenereerd. De foutrecord kan echter niet worden opgehaald voordat de asynchrone bewerking is voltooid.
HandleType Argument
Aan elk handletype kunnen diagnostische gegevens zijn gekoppeld. Het argument HandleType geeft het handle-type Handleaan.
Sommige header- en recordvelden kunnen niet worden geretourneerd voor handles voor omgeving, verbinding, instructie en descriptor. Deze ingangen waarvoor een veld niet van toepassing is, worden aangegeven in de volgende secties Veldnamen en Recordvelden.
Als HandleType- is SQL_HANDLE_ENV, kan Handle een gedeelde of niet-gedeelde omgevingshandgreep zijn.
Er moeten geen diagnostische veldnamen voor stuurprogramma's worden gekoppeld aan een omgevingsgreep.
De enige velden voor diagnostische headers die zijn gedefinieerd voor een descriptorgreep, zijn SQL_DIAG_NUMBER en SQL_DIAG_RETURNCODE.
DiagIdentifier-argument
Dit argument geeft de id aan van het veld dat is vereist in de structuur van de diagnostische gegevens. Als RecNumber groter is dan of gelijk is aan 1, worden de diagnostische gegevens in het veld beschreven die door een functie worden geretourneerd. Als RecNumber 0 is, bevindt het veld zich in de koptekst van de structuur van de diagnostische gegevens en bevat daarom gegevens met betrekking tot de functie-aanroep die de diagnostische gegevens heeft geretourneerd, niet naar de specifieke informatie.
Stuurprogramma's kunnen veldnamen en recordvelden definiëren die specifiek zijn voor stuurprogramma's in de structuur van diagnostische gegevens.
Een ODBC 3*.x*-toepassing die werkt met een ODBC 2*.x*-stuurprogramma kan SQLGetDiag Field alleen aanroepen met een DiagIdentifier- argument van 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, of SQL_DIAG_SQLSTATE. Alle andere diagnostische velden retourneren SQL_ERROR.
Koptekstvelden
De veldnamen in de volgende tabel kunnen worden opgenomen in het argument DiagIdentifier.
DiagIdentifier | Retourtype | Retourneert |
---|---|---|
SQL_DIAG_CURSOR_ROW_COUNT | SQLLEN | Dit veld bevat het aantal rijen in de cursor. De semantiek is afhankelijk van de SQLGetInfo informatietypen SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 en SQL_STATIC_CURSOR_ATTRIBUTES2, die aangeven welke rijaantallen beschikbaar zijn voor elk cursortype (in de SQL_CA2_CRC_EXACT en SQL_CA2_CRC_APPROXIMATE bits). De inhoud van dit veld is alleen gedefinieerd voor instructie-ingangen en pas nadat SQLExecute, SQLExecDirectof SQLMoreResults is aangeroepen. Als u SQLGetDiagField- aanroept met een DiagIdentifier- van SQL_DIAG_CURSOR_ROW_COUNT, wordt SQL_ERROR geretourneerd. |
SQL_DIAG_DYNAMIC_FUNCTION | SQLCHAR * | Dit is een tekenreeks die de SQL-instructie beschrijft die door de onderliggende functie is uitgevoerd. (Zie 'Waarden van de velden dynamische functie', verderop in deze sectie, voor specifieke waarden.) De inhoud van dit veld is alleen gedefinieerd voor instructiegrepen en alleen na een aanroep naar SQLExecute, SQLExecDirectof SQLMoreResults. Als u SQLGetDiagField- aanroept met een DiagIdentifier- van SQL_DIAG_DYNAMIC_FUNCTION, wordt SQL_ERROR geretourneerd. De waarde van dit veld is niet gedefinieerd voordat een aanroep naar SQLExecute- of SQLExecDirect-. |
SQL_DIAG_DYNAMIC_FUNCTION_CODE | SQLINTEGER | Dit is een numerieke code die de SQL-instructie beschrijft die is uitgevoerd door de onderliggende functie. (Zie 'Waarden van de dynamische functievelden', verderop in deze sectie, voor specifieke waarde.) De inhoud van dit veld is alleen gedefinieerd voor instructiegrepen en alleen na een aanroep naar SQLExecute, SQLExecDirectof SQLMoreResults. Als u SQLGetDiagField aanroept met een DiagIdentifier- van SQL_DIAG_DYNAMIC_FUNCTION_CODE, worden SQL_ERROR geretourneerd. De waarde van dit veld is niet gedefinieerd voordat een aanroep naar SQLExecute- of SQLExecDirect-. |
SQL_DIAG_NUMBER | SQLINTEGER | Het aantal statusrecords dat beschikbaar is voor de opgegeven ingang. |
SQL_DIAG_RETURNCODE | SQLRETURN | Retourcode die door de functie wordt geretourneerd. Zie Retourcodesvoor een lijst met retourcodes. Het stuurprogramma hoeft geen SQL_DIAG_RETURNCODE te implementeren; deze wordt altijd geïmplementeerd door Driver Manager. Als er nog geen functie is aangeroepen op de Handle-, wordt SQL_SUCCESS geretourneerd voor SQL_DIAG_RETURNCODE. |
SQL_DIAG_ROW_COUNT | SQLLEN | Het aantal rijen dat wordt beïnvloed door een invoeg-, verwijder- of updatebewerking die wordt uitgevoerd door SQLExecute, SQLExecDirect, SQLBulkOperationsof SQLSetPos. Het is door het stuurprogramma gedefinieerd nadat een cursorspecificatie is uitgevoerd. De inhoud van dit veld is alleen gedefinieerd voor instructiegrepen. Het aanroepen van SQLGetDiagField- met een DiagIdentifier- van SQL_DIAG_ROW_COUNT op een andere manier dan een instructiehandgreep, retourneert SQL_ERROR. De gegevens in dit veld worden ook geretourneerd in het argument RowCountPtr van SQLRowCount. De gegevens in dit veld worden opnieuw ingesteld na elke niet-onafhankelijke functieaanroep, terwijl het aantal rijen dat wordt geretourneerd door SQLRowCount- hetzelfde blijft totdat de instructie is ingesteld op de voorbereide of toegewezen status. |
Recordvelden
De recordvelden die in de volgende tabel worden vermeld, kunnen worden opgenomen in het argument DiagIdentifier.
DiagIdentifier | Retourtype | Retourneert |
---|---|---|
SQL_DIAG_CLASS_ORIGIN | SQLCHAR * | Een tekenreeks die het document aangeeft dat het klassegedeelte van de SQLSTATE-waarde in deze record definieert. De waarde is ISO 9075 voor alle SQLSTATEs die zijn gedefinieerd door de interface Open Group en ISO-aanroepniveau. Voor ODBC-specifieke SQLSTATEs (alle SQLSTATE-klassen 'IM'), is de waarde 'ODBC 3.0'. |
SQL_DIAG_COLUMN_NUMBER | SQLINTEGER | Als het SQL_DIAG_ROW_NUMBER veld een geldig rijnummer is in een rijset of een set parameters, bevat dit veld de waarde die het kolomnummer in de resultatenset of het parameternummer in de set parameters vertegenwoordigt. Resultaatsetkolomnummers beginnen altijd bij 1; als deze statusrecord betrekking heeft op een bladwijzerkolom, kan het veld nul zijn. Parameternummers beginnen bij 1. Deze bevat de waarde SQL_NO_COLUMN_NUMBER als de statusrecord niet is gekoppeld aan een kolomnummer of parameternummer. Als het stuurprogramma het kolomnummer of parameternummer waaraan deze record is gekoppeld, niet kan bepalen, heeft dit veld de waarde SQL_COLUMN_NUMBER_UNKNOWN. De inhoud van dit veld is alleen gedefinieerd voor instructiegrepen. |
SQL_DIAG_CONNECTION_NAME | SQLCHAR * | Een tekenreeks die de naam aangeeft van de verbinding waarmee de diagnostische record betrekking heeft. Dit veld is door het stuurprogramma gedefinieerd. Voor diagnostische gegevensstructuren die zijn gekoppeld aan de omgevingsgreep en voor diagnostische gegevens die geen verband houden met een verbinding, is dit veld een tekenreeks met lengte nul. |
SQL_DIAG_MESSAGE_TEXT | SQLCHAR * | Een informatief bericht over de fout of waarschuwing. Dit veld is opgemaakt zoals beschreven in Diagnostische berichten. Er is geen maximale lengte voor de tekst van het diagnostische bericht. |
SQL_DIAG_NATIVE | SQLINTEGER | Een systeemeigen foutcode voor stuurprogramma/gegevensbron. Als er geen systeemeigen foutcode is, retourneert het stuurprogramma 0. |
SQL_DIAG_ROW_NUMBER | SQLLEN | Dit veld bevat het rijnummer in de rijenset of het parameternummer in de set parameters waaraan de statusrecord is gekoppeld. Rijnummers en parameternummers beginnen met 1. Dit veld heeft de waarde SQL_NO_ROW_NUMBER als deze statusrecord niet is gekoppeld aan een rijnummer of parameternummer. Als het stuurprogramma het rijnummer of parameternummer waaraan deze record is gekoppeld, niet kan bepalen, heeft dit veld de waarde SQL_ROW_NUMBER_UNKNOWN. De inhoud van dit veld is alleen gedefinieerd voor instructiegrepen. |
SQL_DIAG_SERVER_NAME | SQLCHAR * | Een tekenreeks die de servernaam aangeeft waarop de diagnostische record betrekking heeft. Dit is hetzelfde als de waarde die wordt geretourneerd voor een aanroep naar SQLGetInfo met de optie SQL_DATA_SOURCE_NAME. Voor structuren van diagnostische gegevens die zijn gekoppeld aan de omgevingsgreep en voor diagnostische gegevens die niet betrekking hebben op een server, is dit veld een tekenreeks met lengte nul. |
SQL_DIAG_SQLSTATE | SQLCHAR * | Een diagnostische code van vijf tekens voor SQLSTATE. Zie SQLSTATEsvoor meer informatie. |
SQL_DIAG_SUBCLASS_ORIGIN | SQLCHAR * | Een tekenreeks met dezelfde notatie en geldige waarden als SQL_DIAG_CLASS_ORIGIN die het definiërende gedeelte van het subklassegedeelte van de SQLSTATE-code identificeert. De ODBC-specifieke SQLSTATES waarvoor ODBC 3.0 wordt geretourneerd, zijn onder andere: 01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY099, HY099, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012. |
Waarden van de dynamische functievelden
In de volgende tabel worden de waarden van SQL_DIAG_DYNAMIC_FUNCTION en SQL_DIAG_DYNAMIC_FUNCTION_CODE beschreven die van toepassing zijn op elk type SQL-instructie dat wordt uitgevoerd door een aanroep naar SQLExecute- of SQLExecDirect-. Het stuurprogramma kan door het stuurprogramma gedefinieerde waarden toevoegen aan de waarden die worden vermeld.
SQL-instructie Uitgevoerd |
Waarde van SQL_DIAG_DYNAMIC_FUNCTION |
Waarde van SQL_DIAG_DYNAMIC_FUNCTION_CODE |
---|---|---|
alter-domain-statement | "ALTER DOMAIN" | SQL_DIAG_ALTER_DOMAIN |
alter-table-statement | "ALTER TABLE" | SQL_DIAG_ALTER_TABLE |
assertion-definition | 'ASSERTIE MAKEN' | SQL_DIAG_CREATE_ASSERTION |
tekensetdefinitie | "TEKENSET MAKEN" | SQL_DIAG_CREATE_CHARACTER_SET |
|
"SORTERING MAKEN" | SQL_DIAG_CREATE_COLLATION |
domeindefinitie | "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 | "WEERGAVE MAKEN" | SQL_DIAG_CREATE_VIEW |
cursorspecificatie | "CURSOR SELECTEREN" | SQL_DIAG_SELECT_CURSOR |
delete-statement-positioned | "DYNAMISCHE CURSOR VERWIJDEREN" | SQL_DIAG_DYNAMIC_DELETE_CURSOR |
met delete-statement doorzocht | 'VERWIJDEREN WAAR' | 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 |
"GRANT" | SQL_DIAG_GRANT | |
invoeginstructie | "INSERT" | SQL_DIAG_INSERT |
ODBC-procedure-extensie | "BELLEN" | SQL_DIAG_ BELLEN |
revoke-statement | "INTREKKEN" | SQL_DIAG_REVOKE |
schemadefinitie | "SCHEMA MAKEN" | SQL_DIAG_CREATE_SCHEMA |
vertaaldefinitie | "VERTALING MAKEN" | SQL_DIAG_CREATE_TRANSLATION |
update-instructiepositie | "DYNAMIC UPDATE CURSOR" | SQL_DIAG_DYNAMIC_UPDATE_CURSOR |
met update-instructie doorzocht | "UPDATE WHERE" | SQL_DIAG_UPDATE_WHERE |
Onbekend | lege tekenreeks | SQL_DIAG_UNKNOWN_STATEMENT |
Volgorde van statusrecords
Statusrecords worden in een reeks op basis van rijnummer en het type diagnostische gegevens weergegeven. Driver Manager bepaalt de uiteindelijke volgorde waarin statusrecords worden geretourneerd die worden gegenereerd. Het stuurprogramma bepaalt de uiteindelijke volgorde waarin statusrecords worden geretourneerd die worden gegenereerd.
Als diagnostische records worden geplaatst door zowel Driver Manager als het stuurprogramma, is Driver Manager verantwoordelijk voor het bestellen ervan.
Als er twee of meer statusrecords zijn, wordt de volgorde van de records eerst bepaald door rijnummer. De volgende regels zijn van toepassing op het bepalen van de volgorde van diagnostische records per rij:
Records die niet overeenkomen met een rij worden weergegeven vóór records die overeenkomen met een bepaalde rij, omdat SQL_NO_ROW_NUMBER is gedefinieerd als -1.
Records waarvoor het rijnummer onbekend is, worden weergegeven vóór alle andere records, omdat SQL_ROW_NUMBER_UNKNOWN is gedefinieerd als -2.
Voor alle records die betrekking hebben op specifieke rijen, worden records gesorteerd op de waarde in het SQL_DIAG_ROW_NUMBER veld. Alle fouten en waarschuwingen van de betrokken eerste rij worden vermeld, en vervolgens alle fouten en waarschuwingen van de volgende rij, enzovoort.
Notitie
OdBC 3*.x* Driver Manager bestelt geen statusrecords in de diagnostische wachtrij als SQLSTATE 01S01 (fout in rij) wordt geretourneerd door een ODBC 2*.x* stuurprogramma of als SQLSTATE 01S01 (fout in rij) wordt geretourneerd door een ODBC 3*.x*-stuurprogramma wanneer SQLExtendedFetch- wordt aangeroepen of SQLSetPos wordt aangeroepen op een cursor die is positioneerd met SQLExtendedFetch-.
Binnen elke rij, of voor alle records die niet overeenkomen met een rij of waarvoor het rijnummer onbekend is, of voor al die records met een rijnummer dat gelijk is aan SQL_NO_ROW_NUMBER, wordt de eerste record die wordt vermeld, bepaald door een set sorteerregels te gebruiken. Na de eerste record is de volgorde van de andere records die van invloed zijn op een rij niet gedefinieerd. Een toepassing kan niet aannemen dat fouten voorafgaan aan waarschuwingen na de eerste record. Toepassingen moeten de volledige structuur van diagnostische gegevens scannen om volledige informatie te verkrijgen over een mislukte aanroep naar een functie.
De volgende regels worden gebruikt om de eerste record binnen een rij te bepalen. De record met de hoogste rang is de eerste record. De bron van een record (Driver Manager, stuurprogramma, gateway, enzovoort) wordt niet meegenomen bij het rangschikkingsrecords.
fouten statusrecords waarin fouten worden beschreven, de hoogste rang hebben. De volgende regels worden toegepast op sorteerfouten:
Records die aangeven dat een transactiefout of mogelijke transactiefout alle andere records heeft veroorzaakt.
Als twee of meer records dezelfde foutvoorwaarde beschrijven, vallen SQLSTATEs die zijn gedefinieerd door de OPEN Group CLI-specificatie (klassen 03 tot en met HZ) de ODBC- en door het stuurprogramma gedefinieerde SQLSTATEs uit.
Door implementatie gedefinieerde geen gegevenswaarden statusrecords die door het stuurprogramma gedefinieerde geen gegevenswaarden (klasse 02) beschrijven, hebben de op een na hoogste rang.
Waarschuwingen Statusrecords waarin waarschuwingen (klasse 01) worden beschreven, de laagste rang hebben. Als twee of meer records dezelfde waarschuwingsvoorwaarde beschrijven, worden SQLSTATEs die zijn gedefinieerd door de OPEN Group CLI-specificatie, de ODBC-gedefinieerde en door het stuurprogramma gedefinieerde SQLSTATEs verwijderd.
Verwante functies
Voor informatie over | Zien |
---|---|
Meerdere velden van een structuur voor diagnostische gegevens verkrijgen | SQLGetDiagRec-functie |