SQLSetDescField-Funktion

Konformität
Eingeführte Version: ODBC 3.0 Normenkonformität: ISO 92

Zusammenfassung
SQLSetDescField setzt den Wert eines einzelnen Feldes eines Deskriptor-Datensatzes.

Syntax

SQLRETURN SQLSetDescField(  
     SQLHDESC      DescriptorHandle,  
     SQLSMALLINT   RecNumber,  
     SQLSMALLINT   FieldIdentifier,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    BufferLength);  

Arguments

DescriptorHandle
[Eingabe] Beschreibungs-Handle.

RecNumber
[Eingabe] Zeigt den Deskriptor-Datensatz an, der das Feld enthält, das die Anwendung setzen möchte. Deskriptoreinträge werden ab 0 nummeriert, wobei Datensatz Nummer 0 der Lesezeicheneintrag ist. Das RecNumber-Argument wird für Headerfelder ignoriert.

FieldIdentifier
[Eingabe] Gibt den Körper des Deskriptors an, dessen Wert gesetzt werden soll. Weitere Informationen finden Sie unter "FieldIdentifier Argument" im Bereich "Kommentare".

ValuePtr
[Eingabe] Zeiger auf einen Puffer, der die Deskriptorinformationen enthält, oder auf einen Ganzzahlwert. Der Datentyp hängt vom Wert von FieldIdentifier ab. Wenn ValuePtr ein ganzzahliger Wert ist, kann er je nach Wert des FieldIdentifier-Arguments als 8 Bytes (SQLLEN), 4 Bytes (SQLINTEGER) oder 2 Bytes (SQLSMALLINT) betrachtet werden.

BufferLength
[Eingabe] Wenn FieldIdentifier ein ODBC-definiertes Feld ist und ValuePtr auf eine Zeichenfolge oder einen binären Puffer zeigt, sollte dieses Argument die Länge von *ValuePtr sein. Für Zeichenstring-Daten sollte dieses Argument die Anzahl der Bytes in der Zeichenkette enthalten.

Wenn FieldIdentifier ein ODBC-definiertes Feld ist und ValuePtr eine ganze Zahl, wird BufferLength ignoriert.

Wenn FieldIdentifier ein treiberdefiniertes Feld ist, teilt die Anwendung dem Treibermanager die Natur des Feldes an, indem sie das BufferLength-Argument setzt. BufferLength kann folgende Werte haben:

  • Wenn ValuePtr ein Zeiger auf eine Zeichenfolge ist, dann ist BufferLength die Länge der Zeichenkette oder SQL_NTS.

  • Wenn ValuePtr ein Zeiger auf einen binären Puffer ist, platziert die Anwendung das Ergebnis des SQL_LEN_BINARY_ATTR(length)-Makros in BufferLength. Dies setzt einen negativen Wert in BufferLength.

  • Wenn ValuePtr ein Zeiger auf einen anderen Wert als eine Zeichenkette oder eine Binärfolge ist, sollte BufferLength den Wert SQL_IS_POINTER haben.

  • Wenn ValuePtr einen Wert mit fester Länge enthält, ist BufferLength je nach Bedarf entweder SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT oder SQL_IS_USMALLINT.

Rückkehr

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnostics

Wenn SQLSetDescField SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugehöriger SQLSTATE-Wert erhalten werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_DESC und einem HandleDescriptorHandle aufgerufen wird. Die folgende Tabelle listet die SQLSetDescField-Werte auf, die häufig von SQLSetDescField zurückgegeben werden, und erklärt jeden einzelnen im Kontext dieser Funktion; die Notation "(DM)" geht den vom Treibermanager zurückgegebenen SQLSTATE-Beschreibungen voraus. Der rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.

SQLSTATE Fehler Description
01000 Allgemeiner Warnhinweis Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01S02 Optionswert geändert Der Treiber unterstützte nicht den in *ValuePtr angegebenen Wert (wenn ValuePtr ein Zeiger war) oder den Wert in ValuePtr (wenn ValuePtr ein ganzzahliger Wert war), oder *ValuePtr war wegen der Implementierungsbedingungen ungültig, sodass der Treiber einen ähnlichen Wert einsetzte. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
07009 Ungültiger Deskriptorindex Das FieldIdentifier-Argument war ein Datensatzfeld, das RecNumber-Argument 0, und das DescriptorHandle-Argument bezog sich auf einen IPD-Handle.

Das RecNumber-Argument war kleiner als 0, und das DescriptorHandle-Argument bezog sich auf eine ARD oder eine APD.

Das Argument RecNumber war größer als die maximale Anzahl von Spalten oder Parametern, die die Datenquelle unterstützen kann, und das DescriptorHandle-Argument bezog sich auf eine APD oder ARD.

(DM) Das FieldIdentifier-Argument war SQL_DESC_COUNT, und das *ValuePtr-Argument war kleiner als 0.

Das RecNumber-Argument war gleich 0, und das DescriptorHandle-Argument bezog sich auf eine implizit zugewiesene APD. (Dieser Fehler tritt bei einem explizit zugewiesenen Anwendungsdeskriptor nicht auf, da bis zur Ausführung nicht bekannt ist, ob ein explizit zugewiesener Anwendungsdeskriptor ein APD oder ARD ist.)
08S01 Kommunikationslinkfehler Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden wurde, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde.
22001 Zeichenfolgendaten, rechts abgeschnitten Das FieldIdentifier-Argument war SQL_DESC_NAME, und das BufferLength-Argument war ein größerer Wert als SQL_MAX_IDENTIFIER_LEN.
HY000 Allgemeiner Fehler Es ist ein Fehler aufgetreten, für den kein spezifischer SQLSTATE-Wert vorhanden war und für den keine implementierungsspezifische SQLSTATE definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und dessen Ursache.
HY001 Speicherzuweisungsfehler Der Treiber konnte speicher nicht zuordnen, der erforderlich ist, um die Ausführung oder den Abschluss der Funktion zu unterstützen.
HY010 Funktionssequenzfehler (DM) Der DescriptorHandle war mit einem StatementHandle verknüpft, für den eine asynchron ausführende Funktion (nicht diese) aufgerufen wurde und noch ausgeführt wurde, als diese Funktion aufgerufen wurde.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations oder SQLSetPos wurde für das StatementHandle aufgerufen, mit dem der DescriptorHandle verknüpft war, und SQL_NEED_DATA zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle Daten bei ausführungsparametern oder -spalten gesendet wurden.

(DM) Eine asynchron ausführende Funktion wurde für den Verbindungshandle aufgerufen, der mit dem DescriptorHandle verknüpft ist. Diese asynchrone Funktion lief noch, als die SQLSetDescField-Funktion aufgerufen wurde.

(DM) SQLExecute, SQLExecDirect oder SQLMoreResults wurde für einen der mit dem DescriptorHandle verbundenen Anweisungshandles aufgerufen und SQL_PARAM_DATA_AVAILABLE zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle gestreamten Parameter abgerufen wurden.
HY013 Speicherverwaltungsfehler Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund geringer Arbeitsspeicherbedingungen.
HY016 Eine Implementierungszeilenbeschreibung kann nicht modifiziert werden Das DescriptorHandle-Argument war mit einem IRD verknüpft, und das FieldIdentifier-Argument war weder SQL_DESC_ARRAY_STATUS_PTR noch SQL_DESC_ROWS_PROCESSED_PTR.
HY021 Inkonsistente Deskriptorinformationen Die Felder SQL_DESC_TYPE und SQL_DESC_DATETIME_INTERVAL_CODE bilden keinen gültigen ODBC SQL-Typ, keinen gültigen treiberspezifischen SQL-Typ (für IPDs) oder einen gültigen ODBC C-Typ (für APDs oder ARDs).

Die während einer Konsistenzüberprüfung überprüften Deskriptorinformationen waren nicht konsistent. (Siehe "Consistency Check" in SQLSetDescRec.)
HY090 Ungültige Zeichenfolgen- oder Pufferlänge (DM) *ValuePtr ist eine Zeichenfolge, und BufferLength war kleiner als null, aber nicht gleich SQL_NTS.

(DM) Der Treiber war ein ODBC 2*.x*-Treiber, der Deskriptor ein ARD, das KolumnenZahl-Argument war auf 0 gesetzt, und der für das Argument angegebene Wert BufferLength war nicht gleich 4.
HY091 Feldbekennung für ungültige Deskriptoren Der für das FieldIdentifier-Argument angegebene Wert war kein ODBC-definiertes Feld und kein implementierungsdefinierter Wert.

Das FieldIdentifier-Argument war für das DescriptorHandle-Argument ungültig.

Das FieldIdentifier-Argument war ein schreibgeschütztes, von ODBC definiertes Feld.
HY092 Ungültige Attribut-/Options-Identifikator Der Wert in *ValuePtr war für das FieldIdentifier-Argument nicht gültig.

Das FieldIdentifier-Argument war SQL_DESC_UNNAMED, und ValuePtr war SQL_NAMED.
HY105 Ungültiger Parametertyp (DM) Der für das SQL_DESC_PARAMETER_TYPE Feld angegebene Wert war ungültig. (Weitere Informationen finden Sie im Abschnitt "InputOutputType Argument" in SQLBindParameter.)
HY117 Die Verbindung wird aufgrund des unbekannten Transaktionsstatus angehalten. Es sind nur Trenn- und schreibgeschützte Funktionen zulässig. (DM) Für weitere Informationen zum suspendierten Zustand siehe Was ist neu in ODBC 3.8.
HYT01 Verbindungstimeout abgelaufen Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT festgelegt.
IM001 Dieser Treiber unterstützt diese Funktion nicht. (DM) Der mit dem DescriptorHandle verknüpfte Treiber unterstützt die Funktion nicht.

Kommentare

Eine Anwendung kann SQLSetDescField aufrufen , um jedes Deskriptorfeld einzeln zu setzen. Ein Aufruf von SQLSetDescField setzt ein einzelnes Feld in einem einzigen Deskriptor. Diese Funktion kann aufgerufen werden, um jeden Körper in jedem Deskriptortyp zu setzen, vorausgesetzt, der Körper kann gesetzt werden. (Siehe die Tabelle später in diesem Abschnitt.)

Note

Wenn ein Aufruf von SQLSetDescField fehlschlägt, ist der Inhalt des durch das RecNumber-Argument identifizierten Deskriptor-Datensatzes undefiniert.

Andere Funktionen können aufgerufen werden, um mehrere Deskriptorfelder mit einem einzigen Aufruf der Funktion zu setzen. Die SQLSetDescRec-Funktion legt eine Vielzahl von Feldern fest, die den Datentyp und den Puffer beeinflussen, der an eine Spalte oder einen Parameter gebunden ist (die Felder SQL_DESC_TYPE, SQL_DESC_DATETIME_INTERVAL_CODE, SQL_DESC_OCTET_LENGTH, SQL_DESC_PRECISION, SQL_DESC_SCALE, SQL_DESC_DATA_PTR, SQL_DESC_OCTET_LENGTH_PTR und SQL_DESC_INDICATOR_PTR). SQLBindCol oder SQLBindParameter können verwendet werden, um eine vollständige Spezifikation für die Bindung einer Spalte oder eines Parameters zu erstellen. Diese Funktionen setzen eine bestimmte Gruppe von Deskriptorfeldern mit einem Funktionsaufruf.

SQLSetDescField kann aufgerufen werden, um die Bindungspuffer durch Hinzufügen eines Offsets zu den Bindungszeigern (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR oder SQL_DESC_OCTET_LENGTH_PTR) zu ändern. Dies ändert die Bindungspuffer, ohne SQLBindCol oder SQLBindParameter aufzurufen, was einer Anwendung erlaubt, SQL_DESC_DATA_PTR zu ändern, ohne andere Felder wie SQL_DESC_DATA_TYPE zu ändern.

Wenn eine Anwendung SQLSetDescField aufruft, um ein anderes Feld als SQL_DESC_COUNT oder die aufgeschoben Felder SQL_DESC_DATA_PTR, SQL_DESC_OCTET_LENGTH_PTR oder SQL_DESC_INDICATOR_PTR festzulegen, wird der Datensatz ungebunden.

Deskriptor-Headerfelder werden durch das Aufrufen von SQLSetDescField mit dem entsprechenden FieldIdentifier gesetzt. Viele Headerfelder sind ebenfalls Anweisungsattribute, sodass sie auch durch einen Aufruf von SQLSetStmtAttr gesetzt werden können. Dies ermöglicht es Anwendungen, ein Deskriptorfeld zu setzen, ohne vorher einen Deskriptorhandle zu erhalten. Wenn SQLSetDescField aufgerufen wird, um ein Headerfeld zu setzen, wird das RecNumber-Argument ignoriert.

Eine RecNumber von 0 wird verwendet, um Lesezeichenfelder festzulegen.

Note

Das Anweisungsattribut SQL_ATTR_USE_BOOKMARKS sollte immer gesetzt werden, bevor SQLSetDescField aufgerufen wird, um Lesezeichenfelder zu setzen. Obwohl dies nicht verpflichtend ist, wird es dringend empfohlen.

Sequenz der Einstellungsdeskriptorfelder

Beim Setzen von Deskriptorfeldern durch Aufruf von SQLSetDescField muss die Anwendung einer bestimmten Reihenfolge folgen:

  1. Die Anwendung muss zunächst das SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE oder SQL_DESC_DATETIME_INTERVAL_CODE Feld festlegen.

  2. Nachdem eines dieser Felder gesetzt wurde, kann die Anwendung ein Attribut eines Datentyps festlegen, und der Treiber setzt die Datentyp-Attributfelder auf die entsprechenden Standardwerte für den Datentyp. Die automatische Standardeinstellung von Typattributfeldern stellt sicher, dass der Deskriptor immer einsatzbereit ist, sobald die Anwendung einen Datentyp angegeben hat. Wenn die Anwendung explizit ein Datentypattribut setzt, überschreibt sie das Standardattribut.

  3. Nachdem eines der in Schritt 1 aufgeführten Felder und Datentypattribute gesetzt wurden, kann die Anwendung SQL_DESC_DATA_PTR. Dies führt zu einer Konsistenzprüfung der Deskriptorfelder. Wenn die Anwendung nach der Einstellung des SQL_DESC_DATA_PTR-Feldes den Datentyp oder die Attribute ändert, setzt der Treiber SQL_DESC_DATA_PTR auf einen Nullzeiger und entbindet den Datensatz. Dies zwingt die Anwendung, die richtigen Schritte nacheinander abzuschließen, bevor der Deskriptor-Datensatz nutzbar ist.

Initialisierung von Deskriptorfeldern

Wenn ein Deskriptor zugewiesen wird, können die Felder im Deskriptor auf einen Standardwert initialisiert, ohne Standardwert initialisiert oder für den Typ des Deskriptors undefiniert sein. Die folgenden Tabellen zeigen die Initialisierung jedes Feldes für jeden Deskriptortyp, wobei "D" anzeigt, dass das Feld mit einem Standard-Feld initialisiert ist, und "ND" angibt, dass das Feld ohne Standard-Initialisierung erfolgt. Wenn eine Zahl angezeigt wird, ist der Standardwert des Feldes diese Zahl. Die Tabellen geben außerdem an, ob ein Feld lese/schreiben (R/W) oder schreibgeschützt (R) ist.

Die Felder einer IRD haben einen Standardwert erst, nachdem die Aussage vorbereitet oder ausgeführt wurde und die IRD ausgefüllt wurde, nicht wenn der Aussagehandle oder Deskriptor zugewiesen wurde. Bis das IRD ausgefüllt wurde, führt jeder Versuch, Zugang zu einem Feld einer IRD zu erhalten, einen Fehler zurück.

Einige Deskriptorfelder sind für einen oder mehrere, aber nicht alle Deskriptortypen definiert (ARDs und IRDs sowie APDs und IPDs). Wenn ein Feld für einen bestimmten Deskriptortyp undefiniert ist, wird er von keiner der Funktionen benötigt, die diesen Deskriptor verwenden.

Die Felder, auf die SQLGetDescField zugegriffen werden kann, können nicht unbedingt von SQLSetDescField gesetzt werden. Felder, die von SQLSetDescField gesetzt werden können, sind in den folgenden Tabellen aufgeführt.

Die Initialisierung der Headerfelder ist in der folgenden Tabelle umrissen.

Header-Feldname Typ R/W Standard
SQL_DESC_ALLOC_TYPE SQLSMALLINT ARD: R APD: R IRD: R IPD: R ARD: SQL_DESC_ALLOC_AUTO für implizit oder SQL_DESC_ALLOC_USER für explizit

APD: SQL_DESC_ALLOC_AUTO für implizit oder SQL_DESC_ALLOC_USER für explizit

IRD: SQL_DESC_ALLOC_AUTO

IPD: SQL_DESC_ALLOC_AUTO
SQL_DESC_ARRAY_SIZE SQLULEN ARD: R/W APD: R/W IRD: Ungenutzte IPD: Ungenutzte IPD: Ungenutzte ARD:[1] APD:[1] IRD: Ungenutzte IPD: Ungenutzte
SQL_DESC_ARRAY_STATUS_PTR SQLUSMALLINT* ARD: R/W APD: R/W IRD: R/W IPD: R/W ARD: Null ptr APD: Null ptr IRD: Null ptr IPD: Null ptr
SQL_DESC_BIND_OFFSET_PTR SQLLEN* ARD: R/W APD: R/W IRD: Ungenutzte IPD: Ungenutzte IPD: Ungenutzte ARD: Null ptr APD: Null ptr IRD: Ungenutzte IPD: Ungenutzt
SQL_DESC_BIND_TYPE SQLINTEGER ARD: R/W APD: R/W IRD: Ungenutzte IPD: Ungenutzte IPD: Ungenutzte ARD: SQL_BIND_BY_COLUMN

APD: SQL_BIND_BY_COLUMN

IRD: Ungenutzt

IPD: Ungenutzt
SQL_DESC_COUNT SQLSMALLINT ARD: R/W APD: R/W IRD: R IPD: R/W ARD: 0 APD: 0 IRD: D IPD: 0
SQL_DESC_ROWS_PROCESSED_PTR SQLULEN* ARD: Ungenutzte APD: Ungenutzte IRD: R/W IPD: R/W ARD: Ungenutzte APD: Ungenutzte IRD: Null ptr IPD: Null ptr

[1] Diese Felder werden nur definiert, wenn das IPD automatisch vom Treiber ausgefüllt wird. Wenn nicht, sind sie nicht definiert. Wenn eine Anwendung versucht, diese Felder zu setzen, wird SQLSTATE HY091 (Invalid Descriptor Field Identifier) zurückgegeben.

Die Initialisierung der Datensatzfelder ist wie in der folgenden Tabelle gezeigt.

Name des Datensatzfeldes Typ R/W Standard
SQL_DESC_AUTO_UNIQUE_VALUE SQLINTEGER ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_BASE_COLUMN_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_BASE_TABLE_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_CASE_SENSITIVE SQLINTEGER ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R ARD: Ungenutzter APD: Ungenutzter IRD: D IPD: D[1]
SQL_DESC_CATALOG_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_CONCISE_TYPE SQLSMALLINT ARD: R/W APD: R/W IRD: R IPD: R/W ARD: SQL_C_ DEFAULT APD: SQL_C_ DEFAULT IRD: D IPD: ND
SQL_DESC_DATA_PTR SQLPOINTER ARD: R/W APD: R/W IRD: Ungenutzte IPD: Ungenutzte IPD: Ungenutzte ARD: Null ptr APD: Null ptr IRD: Ungenutzte IPD: Ungenutzt[2]
SQL_DESC_DATETIME_INTERVAL_CODE SQLSMALLINT ARD: R/W APD: R/W IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_DATETIME_INTERVAL_PRECISION SQLINTEGER ARD: R/W APD: R/W IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_DISPLAY_SIZE SQLLEN ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_FIXED_PREC_SCALE SQLSMALLINT ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R ARD: Ungenutzter APD: Ungenutzter IRD: D IPD: D[1]
SQL_DESC_INDICATOR_PTR SQLLEN * ARD: R/W APD: R/W IRD: Ungenutzte IPD: Ungenutzte IPD: Ungenutzte ARD: Null ptr APD: Null ptr IRD: Ungenutzte IPD: Ungenutzt
SQL_DESC_LABEL SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_LENGTH SQLULEN ARD: R/W APD: R/W IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_LITERAL_PREFIX SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_LITERAL_SUFFIX SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_LOCAL_TYPE_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R ARD: Ungenutzter APD: Ungenutzter IRD: D IPD: D[1]
SQL_DESC_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_NULLABLE SQLSMALLINT ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_NUM_PREC_RADIX SQLINTEGER ARD: R/W APD: R/W IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_OCTET_LENGTH SQLLEN ARD: R/W APD: R/W IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_OCTET_LENGTH_PTR SQLLEN * ARD: R/W APD: R/W IRD: Ungenutzte IPD: Ungenutzte IPD: Ungenutzte ARD: Null ptr APD: Null ptr IRD: Ungenutzte IPD: Ungenutzt
SQL_DESC_PARAMETER_TYPE SQLSMALLINT ARD: Ungenutzte APD: Ungenutzte IRD: Ungenutzte IPD: R/W ARD: Ungenutzte APD: Ungenutzte IRD: Ungenutzte IPD: D=SQL_PARAM_INPUT
SQL_DESC_PRECISION SQLSMALLINT ARD: R/W APD: R/W IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_ROWVER SQLSMALLINT ARD: Ungenutzt

APD: Ungenutzt

IRD: R

IPD: R
ARD: Ungenutzt

APD: Ungenutzt

IRD: ND

IPD: ND
SQL_DESC_SKALA SQLSMALLINT ARD: R/W APD: R/W IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_SCHEMA_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_SEARCHABLE SQLSMALLINT ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_TABLE_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt
SQL_DESC_TYPE SQLSMALLINT ARD: R/W APD: R/W IRD: R IPD: R/W ARD: SQL_C_DEFAULT APD: SQL_C_DEFAULT IRD: D IPD: ND
SQL_DESC_TYPE_NAME SQLCHAR * ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R ARD: Ungenutzter APD: Ungenutzter IRD: D IPD: D[1]
SQL_DESC_UNNAMED SQLSMALLINT ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R/W ARD: ND APD: ND IRD: D IPD: ND
SQL_DESC_UNSIGNED SQLSMALLINT ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: R ARD: Ungenutzter APD: Ungenutzter IRD: D IPD: D[1]
SQL_DESC_UPDATABLE SQLSMALLINT ARD: Ungenutzte APD: Ungenutzte IRD: R IPD: Ungenutzt ARD: Ungenutzte APD: Ungenutzte IRD: D IPD: Ungenutzt

[1] Diese Felder werden nur definiert, wenn das IPD automatisch vom Treiber ausgefüllt wird. Wenn nicht, sind sie nicht definiert. Wenn eine Anwendung versucht, diese Felder zu setzen, wird SQLSTATE HY091 (Invalid Descriptor Field Identifier) zurückgegeben.

[2] Das SQL_DESC_DATA_PTR Feld im IPD kann so eingestellt werden, dass eine Konsistenzprüfung erzwungen wird. Bei einem späteren Aufruf von SQLGetDescField oder SQLGetDescRec muss der Treiber nicht den Wert zurückgeben, auf den SQL_DESC_DATA_PTR gesetzt wurde.

FieldIdentifier-Argument

Das FieldIdentifier-Argument gibt das zu setzende Deskriptorfeld an. Ein Deskriptor enthält den Deskriptor-Header, der aus den im nächsten Abschnitt "Header Fields" beschriebenen Header-Feldern und null oder mehr Deskriptor-Datensätzen besteht, bestehend aus den Datensatzfeldern, die im Abschnitt nach dem Abschnitt "Header Fields" beschrieben sind.

Kopffelder

Jeder Deskriptor hat einen Header, der aus folgenden Feldern besteht:

SQL_DESC_ALLOC_TYPE [Alle]
Dieses schreibgeschützte SQLSMALLINT-Headerfeld gibt an, ob der Deskriptor automatisch vom Treiber oder explizit von der Anwendung zugewiesen wurde. Die Anwendung kann dieses Feld erhalten, aber nicht ändern. Das Feld wird vom Treiber auf SQL_DESC_ALLOC_AUTO gesetzt, wenn der Deskriptor automatisch vom Treiber zugewiesen wurde. Er wird vom Treiber auf SQL_DESC_ALLOC_USER gesetzt, wenn der Deskriptor explizit von der Anwendung zugewiesen wurde.

SQL_DESC_ARRAY_SIZE [Anwendungsbeschreibungen]
In ARDs gibt dieses SQLULEN-Headerfeld die Anzahl der Zeilen im Zeilensatz an. Dies ist die Anzahl der Zeilen, die durch einen Aufruf zu SQLFetch oder SQLFetchScroll zurückgegeben oder durch einen Aufruf zu SQLBulkOperations oder SQLSetPos ausgeführt werden sollen.

In APDs gibt dieses SQLULEN-Headerfeld die Anzahl der Werte für jeden Parameter an.

Der Standardwert dieses Feldes ist 1. Ist SQL_DESC_ARRAY_SIZE größer als 1, zeigen SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR der APD oder ARD auf Arrays. Die Kardinalität jedes Arrays entspricht dem Wert dieses Körpers.

Dieses Feld in der ARD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_ROW_ARRAY_SIZE gesetzt werden. Dieses Feld in der APD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_PARAMSET_SIZE gesetzt werden.

SQL_DESC_ARRAY_STATUS_PTR [Alle]
Für jeden Deskriptortyp zeigt dieses SQLUSMALLINT *-Headerfeld auf ein Array von SQLUSMALLINT-Werten. Diese Arrays werden wie folgt benannt: Zeilenstatusarray (IRD), Parameterstatusarray (IPD), Zeilenoperationsarray (ARD) und Parameteroperationsarray (APD).

Im IRD zeigt dieses Headerfeld nach einem Aufruf von SQLBulkOperations, SQLFetch, SQLFetchScroll oder SQLSetPos auf ein Zeilenstatusarray mit Statuswerten. Das Array enthält so viele Elemente, wie es Zeilen im Zeilensatz gibt. Die Anwendung muss ein Array von SQLUSMALLINTs zuweisen und dieses Feld so einstellen, dass es auf das Array zeigt. Das Feld ist standardmäßig auf einen Nullzeiger gesetzt. Der Treiber befüllt das Array – es sei denn, das SQL_DESC_ARRAY_STATUS_PTR-Feld wird auf einen Nullzeiger gesetzt, in diesem Fall werden keine Statuswerte generiert und das Array wird nicht ausgefüllt.

Caution

Das Treiberverhalten ist undefiniert, wenn die Anwendung die Elemente des Zeilenstatus-Arrays setzt, auf die das SQL_DESC_ARRAY_STATUS_PTR Feld des IRD zeigt.

Das Array wird zunächst durch einen Aufruf von SQLBulkOperations, SQLFetch, SQLFetchScroll oder SQLSetPos befüllt. Wenn der Aufruf nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgegeben hat, sind die Inhalte des von diesem Feld gezeigten Arrays undefiniert. Die Elemente im Array können folgende Werte enthalten:

  • SQL_ROW_SUCCESS: Die Reihe wurde erfolgreich geholt und hat sich seit dem letzten Abruf nicht verändert.

  • SQL_ROW_SUCCESS_WITH_INFO: Die Reihe wurde erfolgreich geholt und hat sich seit dem letzten Abruf nicht verändert. Es wurde jedoch eine Warnung zu der Zeile zurückgegeben.

  • SQL_ROW_ERROR: Beim Abrufen der Reihe trat ein Fehler auf.

  • SQL_ROW_UPDATED: Die Reihe wurde erfolgreich abgerufen und seit dem letzten Mal aktualisiert. Wenn die Reihe erneut abgerufen wird, ist ihr Status SQL_ROW_SUCCESS.

  • SQL_ROW_DELETED: Die Reihe wurde gelöscht, seit sie zuletzt abgerufen wurde.

  • SQL_ROW_ADDED: Die Zeile wurde von SQLBulkOperations eingefügt. Wenn die Reihe erneut abgerufen wird, ist ihr Status SQL_ROW_SUCCESS.

  • SQL_ROW_NOROW: Der Zeilensatz überlappte das Ende der Ergebnismenge, und es wurde keine Zeile zurückgegeben, die diesem Element des Zeilenstatusarrays entsprach.

Dieses Feld im IRD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_ROW_STATUS_PTR gesetzt werden.

Das SQL_DESC_ARRAY_STATUS_PTR Feld des IRD ist nur gültig, nachdem SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgegeben wurde. Ist der Rückgabecode nicht einer dieser Varianten, ist der von SQL_DESC_ROWS_PROCESSED_PTR angezeigte Ort undefiniert.

Im IPD zeigt dieses Headerfeld auf ein Statusarray mit Statusinformationen für jede Menge von Parameterwerten nach einem Aufruf von SQLExecute oder SQLExecDirect. Wenn der Aufruf zu SQLExecute oder SQLExecDirect nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgegeben hat, sind die Inhalte des von diesem Feld gezeigten Arrays undefiniert. Die Anwendung muss ein Array von SQLUSMALLINTs zuweisen und dieses Feld so einstellen, dass es auf das Array zeigt. Der Treiber befüllt das Array – es sei denn, das SQL_DESC_ARRAY_STATUS_PTR-Feld wird auf einen Nullzeiger gesetzt, in diesem Fall werden keine Statuswerte generiert und das Array wird nicht ausgefüllt. Die Elemente im Array können folgende Werte enthalten:

  • SQL_PARAM_SUCCESS: Die SQL-Anweisung wurde für diesen Parametersatz erfolgreich ausgeführt.

  • SQL_PARAM_SUCCESS_WITH_INFO: Die SQL-Anweisung wurde für diesen Parametersatz erfolgreich ausgeführt; Warnhinweise sind jedoch in der Diagnosedatenstruktur verfügbar.

  • SQL_PARAM_ERROR: Bei der Verarbeitung dieses Parameters trat ein Fehler auf. Zusätzliche Fehlerinformationen sind in der Diagnosedatenstruktur verfügbar.

  • SQL_PARAM_UNUSED: Dieser Parametersatz wurde nicht verwendet, möglicherweise weil ein vorheriger Parametersatz einen Fehler verursachte, der die weitere Verarbeitung unterbrach, oder weil SQL_PARAM_IGNORE für diese Parametermenge im vom SQL_DESC_ARRAY_STATUS_PTR Feld der APD angegebenen Array festgelegt wurde.

  • SQL_PARAM_DIAG_UNAVAILABLE: Diagnostische Informationen sind nicht verfügbar. Ein Beispiel dafür ist, wenn der Treiber Parameterarrays als monolithische Einheit behandelt und daher diese Fehlerinformation nicht erzeugt.

Dieses Feld im IPD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_PARAM_STATUS_PTR gesetzt werden.

Im ARD zeigt dieses Headerfeld auf ein Zeilenoperations-Array von Werten, das von der Anwendung gesetzt werden kann, um anzuzeigen, ob diese Zeile für SQLSetPos-Operationen ignoriert werden soll. Die Elemente im Array können folgende Werte enthalten:

  • SQL_ROW_PROCEED: Die Zeile wird in die Massenoperation mit SQLSetPos einbezogen. (Diese Einstellung garantiert nicht, dass die Operation auf der Reihe stattfindet. Wenn die Zeile den Status SQL_ROW_ERROR im IRD-Zeilenstatusarray hat, kann der Treiber die Operation in der Zeile möglicherweise nicht ausführen.)

  • SQL_ROW_IGNORE: Die Zeile wird von der Massenoperation mit SQLSetPos ausgeschlossen.

Wenn keine Elemente des Arrays gesetzt sind, werden alle Zeilen in die Bulk-Operation einbezogen. Ist der Wert im SQL_DESC_ARRAY_STATUS_PTR-Feld des ARD ein Nullzeiger, werden alle Zeilen in die Bulk-Operation einbezogen; Die Interpretation ist die gleiche, als würde der Zeiger auf ein gültiges Array zeigen und alle Elemente des Arrays wären SQL_ROW_PROCEED. Wenn ein Element im Array auf SQL_ROW_IGNORE gesetzt ist, wird der Wert im Zeilenstatusarray für die ignorierte Zeile nicht geändert.

Dieses Feld im ARD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_ROW_OPERATION_PTR gesetzt werden.

Im APD zeigt dieses Header-Feld auf ein Parameteroperations-Array von Werten, das von der Anwendung gesetzt werden kann, um anzuzeigen, ob dieser Parametersatz beim Aufruf von SQLExecute oder SQLExecDirect ignoriert werden soll. Die Elemente im Array können folgende Werte enthalten:

  • SQL_PARAM_PROCEED: Der Parametersatz ist im SQLExecute - oder SQLExecDirect-Aufruf enthalten.

  • SQL_PARAM_IGNORE: Die Menge der Parameter wird aus dem SQLExecute - oder SQLExecDirect-Aufruf ausgeschlossen.

Wenn keine Elemente des Arrays gesetzt sind, werden alle Parametersätze im Array in den SQLExecute - oder SQLExecDirect-Aufrufen verwendet. Ist der Wert im SQL_DESC_ARRAY_STATUS_PTR Feld der APD ein Nullzeiger, werden alle Parametermengen verwendet; Die Interpretation ist dieselbe, als würde der Zeiger auf ein gültiges Array zeigen und alle Elemente des Arrays wären SQL_PARAM_PROCEED.

Dieses Feld im APD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_PARAM_OPERATION_PTR gesetzt werden.

SQL_DESC_BIND_OFFSET_PTR [Anwendungsbeschreibungen]
Dieses SQLLEN *-Headerfeld zeigt auf den Bindungsoffset. Standardmäßig ist er auf einen Nullzeiger gesetzt. Wenn dieses Feld kein Nullzeiger ist, dereferenziert der Treiber den Zeiger und fügt den dereferierten Wert zu jedem der aufgeschobenen Felder hinzu, das im Deskriptor-Datensatz (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR) zum Abruf einen nicht-nullen Wert hat, und verwendet die neuen Zeigerwerte beim Binden.

Der Bindungsoffset wird immer direkt zu den Werten in den Feldern SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR addiert. Wenn der Offset auf einen anderen Wert geändert wird, wird der neue Wert weiterhin direkt zum Wert in jedem Deskriptorfeld hinzugefügt. Der neue Offset wird nicht zum Feldwert plus einen früheren Offset addiert.

Dieses Feld ist ein deferiertes Feld: Es wird zum Zeitpunkt der Einstellung nicht verwendet, aber zu einem späteren Zeitpunkt vom Treiber, wenn er Adressen für Datenpuffer bestimmen muss.

Dieses Feld im ARD kann auch durch das Aufrufen von SQLSetStmtAttr mit dem Attribut SQL_ATTR_ROW_BIND_OFFSET_PTR gesetzt werden. Dieses Feld im ARD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_PARAM_BIND_OFFSET_PTR gesetzt werden.

Weitere Informationen finden Sie in der Beschreibung der zeilenweisen Bindung in SQLFetchScroll und SQLBindParameter.

SQL_DESC_BIND_TYPE [Anwendungsbeschreibungen]
Dieses SQLUINTEGER-Headerfeld legt die Bindungsorientierung fest, die für die Bindung von Spalten oder Parametern verwendet wird.

In ARDs gibt dieses Feld die Bindungsorientierung an, wenn SQLFetchScroll oder SQLFetch auf dem zugehörigen Anweisungshandle aufgerufen wird.

Um spaltenweise Bindungen für Spalten auszuwählen, wird dieses Feld auf SQL_BIND_BY_COLUMN (Standard) gesetzt.

Dieses Feld im ARD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_ROW_BIND_TYPE gesetzt werden.

In APDs spezifiziert dieses Feld die Bindungsorientierung, die für dynamische Parameter verwendet werden soll.

Um die spaltenweise Bindung für Parameter auszuwählen, wird dieses Feld auf SQL_BIND_BY_COLUMN (Standard) gesetzt.

Dieses Feld im APD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_PARAM_BIND_TYPE gesetzt werden.

SQL_DESC_COUNT [Alle]
Dieses SQLSMALLINT-Headerfeld spezifiziert den 1-basierten Index des höchstnummerierten Datensatzes, der Daten enthält. Wenn der Treiber die Datenstruktur für den Deskriptor setzt, muss er auch das SQL_DESC_COUNT Feld festlegen, um anzuzeigen, wie viele Datensätze signifikant sind. Wenn eine Anwendung eine Instanz dieser Datenstruktur zuweist, muss sie nicht angeben, für wie viele Datensätze Platz reserviert werden soll. Während die Anwendung den Inhalt der Datensätze angibt, ergreift der Treiber alle erforderlichen Maßnahmen, um sicherzustellen, dass der Deskriptorhandle auf eine Datenstruktur angemessener Größe verweist.

SQL_DESC_COUNT ist nicht die Zählung aller Datenspalten, die gebunden sind (wenn das Feld in einem ARD liegt) oder aller Parameter, die gebunden sind (wenn das Feld in einer APD ist), sondern die Nummer des höchstnummerierten Datensatzes. Wenn die Spalte oder der Parameter mit der höchsten Nummer ungebunden ist, wird SQL_DESC_COUNT auf die Nummer der nächstplatzierten Spalte oder des Parameters geändert. Wenn eine Spalte oder ein Parameter mit einer Zahl, die kleiner ist als die Zahl der höchsten Spalte, ungebunden ist (indem SQLBindCol mit dem TargetValuePtr-Argument auf einen Nullzeiger gesetzt wird, oder SQLBindParameter mit dem ParameterValuePtr-Argument auf einen Nullzeiger gesetzt wird), wird SQL_DESC_COUNT nicht verändert. Wenn zusätzliche Spalten oder Parameter mit Zahlen gebunden sind, die größer sind als der höchste Datensatz, der Daten enthält, erhöht der Treiber automatisch den Wert im SQL_DESC_COUNT-Feld. Wenn alle Spalten durch das Aufrufen von SQLFreeStmt mit der SQL_UNBIND-Option nicht gebunden sind, werden die SQL_DESC_COUNT Felder in ARD und IRD auf 0 gesetzt. Wenn SQLFreeStmt mit der SQL_RESET_PARAMS-Option aufgerufen wird, werden die SQL_DESC_COUNT Felder in APD und IPD auf 0 gesetzt.

Der Wert in SQL_DESC_COUNT kann explizit von einer Anwendung durch Aufruf von SQLSetDescField festgelegt werden. Wenn der Wert in SQL_DESC_COUNT explizit verringert wird, werden alle Datensätze mit Zahlen größer als der neue Wert in SQL_DESC_COUNT effektiv entfernt. Ist der Wert in SQL_DESC_COUNT explizit auf 0 gesetzt und das Feld befindet sich in einer ARD, werden alle Datenpuffer außer einer gebundenen Lesezeichenspalte freigegeben.

Die Anzahl der Datensätze in diesem Feld eines ARD enthält keine gebundene Lesezeichenspalte. Die einzige Möglichkeit, eine Lesezeichenspalte zu entbinden, ist, das SQL_DESC_DATA_PTR Feld auf einen Nullzeiger zu setzen.

SQL_DESC_ROWS_PROCESSED_PTR [Implementierungsbeschreibungen]
In einem IRD zeigt dieses SQLULEN*-Headerfeld auf einen Puffer, der die Anzahl der Zeilen enthält, die nach einem Aufruf von SQLFetch oder SQLFetchScroll abgerufen wurden, oder auf die Anzahl der Zeilen, die in einer Massenoperation durch einen Aufruf von SQLBulkOperations oder SQLSetPos ausgeführt wurden, einschließlich Fehlerzeilen.

In einem IPD zeigt dieses SQLUINTEGER*-Headerfeld auf einen Puffer, der die Anzahl der verarbeiteten Parametersätze, einschließlich Fehlermengen, enthält. Es wird keine Zahl zurückgegeben, wenn es sich um einen Nullzeiger handelt.

SQL_DESC_ROWS_PROCESSED_PTR ist nur gültig, nachdem SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO nach einem Aufruf von SQLFetch oder SQLFetchScroll (für ein IRD-Feld) oder SQLExecute, SQLExecDirect oder SQLParamData (für ein IPD-Feld) zurückgegeben wurde. Wenn der Aufruf, der den von diesem Feld gezeigten Puffer ausfüllt, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, sind die Inhalte des Puffers undefiniert, es sei denn, er gibt SQL_NO_DATA zurück, in welchem Fall der Wert im Puffer auf 0 gesetzt wird.

Dieses Feld im ARD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_ROWS_FETCHED_PTR gesetzt werden. Dieses Feld im APD kann auch durch Aufruf von SQLSetStmtAttr mit dem Attribut SQL_ATTR_PARAMS_PROCESSED_PTR gesetzt werden.

Der von diesem Feld gezeigte Puffer wird von der Anwendung zugewiesen. Es handelt sich um einen verzögerten Ausgangspuffer, der vom Treiber eingestellt wird. Standardmäßig ist er auf einen Nullzeiger gesetzt.

Rekordfelder

Jeder Deskriptor enthält einen oder mehrere Datensätze, die aus Feldern bestehen, die entweder Spaltendaten oder dynamische Parameter definieren, abhängig vom Typ des Deskriptors. Jeder Datensatz ist eine vollständige Definition einer einzelnen Spalte oder eines Parameters.

SQL_DESC_AUTO_UNIQUE_VALUE [IRDs]
Dieses schreibgeschützte SQL-Integer-Datensatzfeld enthält SQL_TRUE, wenn die Spalte eine automatisch inkrementierende Spalte ist, oder SQL_FALSE, wenn die Spalte keine automatisch inkrementierende Spalte ist. Dieses Feld ist schreibgeschützt, aber die zugrundeliegende automatische inkrementierende Spalte ist nicht unbedingt schreibgeschützt.

SQL_DESC_BASE_COLUMN_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält den Basis-Spaltennamen der Ergebnismengen-Spalte. Wenn kein Basis-Spaltenname existiert (wie im Fall von Spalten, die Ausdrücke sind), enthält diese Variable eine leere Zeichenkette.

SQL_DESC_BASE_TABLE_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält den Basistabellennamen für die Spalte der Ergebnismenge. Wenn ein Basistabellenname nicht definiert werden kann oder nicht anwendbar ist, enthält diese Variable eine leere Zeichenkette.

SQL_DESC_CASE_SENSITIVE [Implementierungsbeschreibungen]
Dieses schreibgeschützte SQLINTEGER-Datensatzfeld enthält SQL_TRUE, wenn die Spalte oder der Parameter für Kollationen und Vergleiche als groß- und schreibungssensitiv behandelt wird, oder SQL_FALSE, wenn die Spalte für Kollationen und Vergleiche nicht als groß- und schreibungssensitiv behandelt wird oder wenn es sich um eine Spalte ohne Zeichen handelt.

SQL_DESC_CATALOG_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält den Katalog der Basistabelle, die die Spalte enthält. Der Rückgabewert ist treiberabhängig, wenn die Spalte ein Ausdruck ist oder wenn die Spalte Teil einer Ansicht ist. Wenn die Datenquelle keine Kataloge unterstützt oder der Katalog nicht bestimmt werden kann, enthält diese Variable einen leeren String.

SQL_DESC_CONCISE_TYPE [Alle]
Dieses SQLSMALLINT-Headerfeld spezifiziert den prägnanten Datentyp für alle Datentypen, einschließlich der Datumszeit- und Intervalldatentypen.

Die Werte in den Feldern SQL_DESC_CONCISE_TYPE, SQL_DESC_TYPE und SQL_DESC_DATETIME_INTERVAL_CODE sind voneinander abhängig. Jedes Mal, wenn eines der Felder gesetzt wird, muss auch das andere gesetzt werden. SQL_DESC_CONCISE_TYPE kann durch einen Aufruf von SQLBindCol , SQLBindParameter oder SQLSetDescField gesetzt werden. SQL_DESC_TYPE kann durch einen Aufruf von SQLSetDescField oder SQLSetDescRec gesetzt werden.

Wenn SQL_DESC_CONCISE_TYPE auf einen prägnanten Datentyp gesetzt ist, der nicht ein Intervall- oder Datumsdaten-Datentyp ist, wird das SQL_DESC_TYPE-Feld auf denselben Wert gesetzt und das SQL_DESC_DATETIME_INTERVAL_CODE-Feld auf 0.

Wenn SQL_DESC_CONCISE_TYPE auf den kompakten Datentyp Datetime- oder Intervalldaten gesetzt ist, wird das SQL_DESC_TYPE-Feld auf den entsprechenden Verbose-Typ (SQL_DATETIME oder SQL_INTERVAL) gesetzt und das SQL_DESC_DATETIME_INTERVAL_CODE-Feld auf den entsprechenden Untercode.

SQL_DESC_DATA_PTR [Anwendungsbeschreibungen und IPDs]
Dieses SQLPOINTER-Datensatzfeld verweist auf eine Variable, die den Parameterwert (für APDs) oder den Spaltenwert (für ARDs) enthält. Dieses Feld ist ein aufgeschobenes Feld. Es wird zum Zeitpunkt der Einstellung nicht verwendet, sondern zu einem späteren Zeitpunkt vom Treiber verwendet, um Daten abzurufen.

Die durch das SQL_DESC_DATA_PTR Feld des ARD angegebene Spalte ist ungebunden, wenn das TargetValuePtr-Argument in einem Aufruf von SQLBindCol ein Nullzeiger ist oder wenn das SQL_DESC_DATA_PTR Feld im ARD durch einen Aufruf zu SQLSetDescField oder SQLSetDescRec zu einem Nullzeiger gesetzt wird. Andere Körper sind nicht betroffen, wenn das SQL_DESC_DATA_PTR Feld auf einen Nullzeiger gesetzt wird.

Wenn der Aufruf zu SQLFetch oder SQLFetchScroll , der den von diesem Feld gezeigten Puffer ausfüllt, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, sind die Inhalte des Puffers undefiniert.

Wann immer das SQL_DESC_DATA_PTR-Feld eines APD, ARD oder IPD gesetzt ist, prüft der Treiber, ob der Wert im SQL_DESC_TYPE-Feld einen der gültigen ODBC C-Datentypen oder einen treiberspezifischen Datentyp enthält und dass alle anderen Felder, die die Datentypen betreffen, konsistent sind. Eine Konsistenzprüfung anzustoßen ist die einzige Verwendung des SQL_DESC_DATA_PTR Feldes eines IPD. Konkret gilt: Wenn eine Anwendung das SQL_DESC_DATA_PTR Feld eines IPD setzt und später SQLGetDescField auf diesem Feld aufruft, erhält sie nicht unbedingt den von ihr gesetzten Wert zurückgegeben. Weitere Informationen finden Sie unter "Consistency Checks" in SQLSetDescRec.

SQL_DESC_DATETIME_INTERVAL_CODE [Alle]
Dieses SQLSMALLINT-Datensatzfeld enthält den Untercode für den spezifischen Datentyp Datum, Zeit oder Intervall, wenn das SQL_DESC_TYPE Feld SQL_DATETIME oder SQL_INTERVAL ist. Das gilt sowohl für SQL- als auch für C-Datentypen. Der Code besteht aus dem Datentypennamen, wobei "CODE" entweder "TYPE" oder "C_TYPE" (für Datetime-Typen) oder "CODE" anstelle von "INTERVAL" oder "C_INTERVAL" (für Intervalltypen) ersetzt wird.

Wenn SQL_DESC_TYPE und SQL_DESC_CONCISE_TYPE in einem Anwendungsdeskriptor auf SQL_C_DEFAULT gesetzt sind und der Deskriptor nicht mit einem Anweisungshandle verknüpft ist, sind die Inhalte von SQL_DESC_DATETIME_INTERVAL_CODE nicht definiert.

Dieses Feld kann für die in der folgenden Tabelle aufgeführten Datetime-Datentypen festgelegt werden.

Datumszeittypen DATETIME_INTERVAL_CODE
SQL_TYPE_DATE/SQL_C_TYPE_DATE SQL_CODE_DATE
SQL_TYPE_TIME/SQL_C_TYPE_TIME SQL_CODE_TIME
SQL_TYPE_TIMESTAMP/ SQL_C_TYPE_TIMESTAMP SQL_CODE_TIMESTAMP

Dieses Feld kann für die in der folgenden Tabelle aufgeführten Intervalldatentypen gesetzt werden.

Intervalltyp DATETIME_INTERVAL_CODE
SQL_INTERVAL_DAY/ SQL_C_INTERVAL_DAY SQL_CODE_DAY
SQL_INTERVAL_DAY_TO_HOUR/ SQL_C_INTERVAL_DAY_TO_HOUR SQL_CODE_DAY_TO_HOUR
SQL_INTERVAL_DAY_TO_MINUTE/ SQL_C_INTERVAL_DAY_TO_MINUTE SQL_CODE_DAY_TO_MINUTE
SQL_INTERVAL_DAY_TO_SECOND/ SQL_C_INTERVAL_DAY_TO_SECOND SQL_CODE_DAY_TO_SECOND
SQL_INTERVAL_HOUR/ SQL_C_INTERVAL_HOUR SQL_CODE_HOUR
SQL_INTERVAL_HOUR_TO_MINUTE/ SQL_C_INTERVAL_HOUR_TO_MINUTE SQL_CODE_HOUR_TO_MINUTE
SQL_INTERVAL_HOUR_TO_SECOND/ SQL_C_INTERVAL_HOUR_TO_SECOND SQL_CODE_HOUR_TO_SECOND
SQL_INTERVAL_MINUTE/ SQL_C_INTERVAL_MINUTE SQL_CODE_MINUTE
SQL_INTERVAL_MINUTE_TO_SECOND/ SQL_C_INTERVAL_MINUTE_TO_SECOND SQL_CODE_MINUTE_TO_SECOND
SQL_INTERVAL_MONTH/ SQL_C_INTERVAL_MONTH SQL_CODE_MONTH
SQL_INTERVAL_SECOND/ SQL_C_INTERVAL_SECOND SQL_CODE_SECOND
SQL_INTERVAL_YEAR/ SQL_C_INTERVAL_YEAR SQL_CODE_YEAR
SQL_INTERVAL_YEAR_TO_MONTH/ SQL_C_INTERVAL_YEAR_TO_MONTH SQL_CODE_YEAR_TO_MONTH

Weitere Informationen zu den Datenintervallen und diesem Feld finden Sie unter Data Type Identifiers and Descriptors.

SQL_DESC_DATETIME_INTERVAL_PRECISION [Alle]
Dieses SQLINTEGER-Datensatzfeld enthält die Intervall-führende Genauigkeit, wenn das SQL_DESC_TYPE Feld SQL_INTERVAL ist. Wenn das SQL_DESC_DATETIME_INTERVAL_CODE Feld auf einen Intervalldatentyp gesetzt ist, wird dieses Feld auf die Standard-Intervall-führende Genauigkeit gesetzt.

SQL_DESC_DISPLAY_SIZE [IRDs]
Dieses schreibgeschützte SQLINTEGER-Datensatzfeld enthält die maximale Anzahl an Zeichen, die zur Darstellung der Daten aus der Spalte erforderlich sind.

SQL_DESC_FIXED_PREC_SCALE [Implementierungsbeschreibungen]
Dieses schreibgeschützte SQLSMALLINT-Datensatzfeld wird auf SQL_TRUE gesetzt, wenn die Spalte eine exakte numerische Spalte ist und eine feste Präzision und eine von null verschiedene Skala besitzt, oder auf SQL_FALSE, wenn die Spalte keine exakte numerische Spalte mit fester Präzision und Skalierung ist.

SQL_DESC_INDICATOR_PTR [Anwendungsbeschreibungen]
In ARDs zeigt dieses SQLLEN*-Datensatzfeld auf die Indikatorvariable. Diese Variable enthält SQL_NULL_DATA, wenn der Spaltenwert NULL ist. Für APDs wird die Indikatorvariable auf SQL_NULL_DATA gesetzt, um NULL-dynamische Argumente zu spezifizieren. Ansonsten ist die Variable null (es sei denn, die Werte in SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR sind derselbe Zeiger).

Ist das SQL_DESC_INDICATOR_PTR-Feld in einer ARD ein Nullzeiger, kann der Treiber keine Informationen darüber zurückgeben, ob die Spalte NULL ist oder nicht. Wenn die Spalte NULL ist und SQL_DESC_INDICATOR_PTR ein Nullzeiger ist, wird SQLSTATE 22002 (Indikatorvariable erforderlich, aber nicht bereitgestellt) zurückgegeben, wenn der Treiber versucht, den Puffer nach einem Aufruf von SQLFetch oder SQLFetchScroll zu füllen. Wenn der Aufruf von SQLFetch oder SQLFetchScroll nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgab, sind die Inhalte des Puffers undefiniert.

Das SQL_DESC_INDICATOR_PTR Feld bestimmt, ob das von SQL_DESC_OCTET_LENGTH_PTR gezeigte Feld gesetzt ist. Wenn der Datenwert einer Spalte NULL ist, setzt der Treiber die Indikatorvariable auf SQL_NULL_DATA. Der von SQL_DESC_OCTET_LENGTH_PTR gezeigte Körper ist dann nicht gesetzt. Wenn während des Abrufs kein NULL-Wert gefunden wird, wird der von SQL_DESC_INDICATOR_PTR gezeigte Puffer auf null gesetzt und der von SQL_DESC_OCTET_LENGTH_PTR gezeigte Puffer auf die Länge der Daten.

Wenn das SQL_DESC_INDICATOR_PTR-Feld in einer APD ein Nullzeiger ist, kann die Anwendung diesen Deskriptor-Datensatz nicht verwenden, um NULL-Argumente zu spezifizieren.

Dieses Feld ist ein aufgeschobenes Feld: Es wird zum Zeitpunkt der Einstellung nicht verwendet, sondern zu einem späteren Zeitpunkt vom Treiber, um die Nullfähigkeit (bei ARDs) anzuzeigen oder die Nullfähigkeit (für APDs) zu bestimmen.

SQL_DESC_LABEL [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält das Spaltenlabel oder den Titel. Wenn die Spalte kein Label hat, enthält diese Variable den Spaltennamen. Ist die Spalte unbenannt und unbeschriftet, enthält diese Variable eine leere Zeichenkette.

SQL_DESC_LENGTH [Alle]
Dieses SQLULEN-Datensatzfeld ist entweder die maximale oder tatsächliche Länge einer Zeichenkette in Zeichen oder ein binärer Datentyp in Bytes. Sie ist die maximale Länge für einen Datentyp mit fester Länge oder die tatsächliche Länge für einen Datentyp mit variabler Länge. Sein Wert schließt immer das Null-Terminationszeichen aus, das die Zeichenkette beendet. Für Werte, deren Typ SQL_TYPE_DATE, SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP oder einer der SQL-Intervall-Datentypen ist, hat dieses Feld die Länge in Zeichen der Zeichenstring-Darstellung des Date-Time- oder Intervallwerts.

Der Wert in diesem Feld kann sich vom Wert für "Länge" unterscheiden, wie er in ODBC 2*.x* definiert ist. Weitere Informationen finden Sie in Anhang D: Datentypen.

SQL_DESC_LITERAL_PREFIX [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält das oder die Zeichen, die der Treiber als Präfix für ein Literal dieses Datentyps erkennt. Diese Variable enthält eine leere Zeichenkette für einen Datentyp, für den ein literales Präfix nicht anwendbar ist.

SQL_DESC_LITERAL_SUFFIX [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält das oder die Zeichen, die der Treiber als Suffix für ein Literal dieses Datentyps erkennt. Diese Variable enthält eine leere Zeichenkette für einen Datentyp, für den ein literales Suffix nicht anwendbar ist.

SQL_DESC_LOCAL_TYPE_NAME [Implementierungsbeschreibungen]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält jeden lokalisierten (Muttersprachen-) Namen für den Datentyp, der sich vom regulären Datentyp unterscheiden kann. Gibt es keinen lokalisierten Namen, wird eine leere Zeichenkette zurückgegeben. Dieses Feld dient nur zu Anzeigezwecken.

SQL_DESC_NAME [Implementierungsbeschreibungen]
Dieses SQLCHAR * Datensatzfeld in einer Zeilenbeschreibung enthält das Spaltenalias, falls es zutrifft. Wenn das Spaltenalias nicht zutrifft, wird der Spaltenname zurückgegeben. In beiden Fällen setzt der Treiber das SQL_DESC_UNNAMED Feld auf SQL_NAMED, wenn er das SQL_DESC_NAME Feld setzt. Wenn es keinen Spaltennamen oder ein Spaltenalias gibt, gibt der Treiber eine leere Zeichenkette im SQL_DESC_NAME Feld zurück und setzt das SQL_DESC_UNNAMED Feld auf SQL_UNNAMED.

Eine Anwendung kann das SQL_DESC_NAME Feld eines IPD auf einen Parameternamen oder Alias setzen, um gespeicherte Prozedurparameter nach Namen zu spezifizieren. (Weitere Informationen finden Sie unter Bindungsparameter nach Namen (Benannte Parameter).) Das SQL_DESC_NAME Feld einer IRD ist ein Nur-Lese-Feld; SQLSTATE HY091 (Invalid Descriptor Field Identifier) wird zurückgegeben, wenn eine Anwendung versucht, es zu setzen.

In IPDs ist dieses Feld undefiniert, wenn der Treiber keine benannten Parameter unterstützt. Wenn der Treiber benannte Parameter unterstützt und in der Lage ist, Parameter zu beschreiben, wird der Parametername in diesem Feld zurückgegeben.

SQL_DESC_NULLABLE [Implementierungsbeschreibungen]
In IRDs wird dieses schreibgeschützte SQLSMALLINT-Record Feld SQL_NULLABLE, wenn die Spalte NULL-Werte haben kann, SQL_NO_NULLS wenn die Spalte keine NULL-Werte hat, oder SQL_NULLABLE_UNKNOWN, wenn nicht bekannt ist, ob die Spalte NULL-Werte akzeptiert. Dieses Feld bezieht sich auf die Spalte der Ergebnismenge, nicht auf die Basisspalte.

In IPDs wird dieses Feld immer auf SQL_NULLABLE gesetzt, da dynamische Parameter immer null sind und von einer Anwendung nicht festgelegt werden können.

SQL_DESC_NUM_PREC_RADIX [Alle]
Dieses SQLINTEGER-Feld enthält den Wert 2, wenn der Datentyp im SQL_DESC_TYPE Feld ein approximativer numerischer Datentyp ist, da das SQL_DESC_PRECISION Feld die Anzahl der Bits enthält. Dieses Feld enthält den Wert 10, wenn der Datentyp im SQL_DESC_TYPE Feld ein exakter numerischer Datentyp ist, da das SQL_DESC_PRECISION Feld die Anzahl der Dezimalziffern enthält. Dieses Feld ist für alle nicht-numerischen Datentypen auf 0 gesetzt.

SQL_DESC_OCTET_LENGTH [Alle]
Dieses SQLLEN-Datensatzfeld enthält die Länge in Bytes eines Zeichenstrings oder binären Datentyps. Für Zeichen- oder Binärtypen mit fester Länge ist dies die tatsächliche Länge in Bytes. Für variable-länge-Zeichen- oder Binärtypen ist dies die maximale Länge in Bytes. Dieser Wert schließt stets Platz für das Null-Terminationszeichen für Implementierungsdeskriptoren aus und enthält immer Platz für das Null-Terminationszeichen für Anwendungsdeskriptoren. Für Anwendungsdaten enthält dieses Feld die Größe des Puffers. Für APDs ist dieses Feld nur für Ausgabe- oder Ein-/Ausgabeparameter definiert.

SQL_DESC_OCTET_LENGTH_PTR [Anwendungsbeschreibungen]
Dieses SQLLEN*-Datensatzfeld weist auf eine Variable hin, die die Gesamtlänge in Bytes eines dynamischen Arguments (für Parameterdeskriptoren) oder eines gebundenen Spaltenwerts (für Zeilendeskriptoren) enthält.

Für eine APD wird dieser Wert für alle Argumente außer Zeichenfolge und Binärcode ignoriert; wenn dieses Feld auf SQL_NTS zeigt, muss das dynamische Argument nullterminiert sein. Um anzuzeigen, dass ein gebundener Parameter ein Daten-at-Ausführungs-Parameter sein wird, setzt eine Anwendung dieses Feld im entsprechenden Datensatz der APD auf eine Variable, die zum Zeitpunkt der Ausführung den Wert SQL_DATA_AT_EXEC oder das Ergebnis des SQL_LEN_DATA_AT_EXEC-Makros enthält. Wenn es mehr als ein solches Feld gibt, kann SQL_DESC_DATA_PTR auf einen Wert gesetzt werden, der den Parameter eindeutig identifiziert, um der Anwendung zu helfen, zu bestimmen, welcher Parameter angefordert wird.

Wenn das OCTET_LENGTH_PTR-Feld einer ARD ein Nullzeiger ist, gibt der Treiber keine Längeninformationen für die Spalte zurück. Wenn das SQL_DESC_OCTET_LENGTH_PTR Feld einer APD ein Nullzeiger ist, nimmt der Treiber an, dass Zeichenketten und Binärwerte null-terminiert sind. (Binärwerte sollten nicht null-terminiert werden, sondern eine Länge erhalten, um eine Trunkierung zu vermeiden.)

Wenn der Aufruf zu SQLFetch oder SQLFetchScroll , der den von diesem Feld gezeigten Puffer ausfüllt, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, sind die Inhalte des Puffers undefiniert. Dieses Feld ist ein aufgeschobenes Feld. Sie wird nicht zum Zeitpunkt der Einstellung verwendet, sondern zu einem späteren Zeitpunkt vom Treiber, um die Oktettlänge der Daten zu bestimmen oder anzuzeigen.

SQL_DESC_PARAMETER_TYPE [IPDs]
Dieses SQLSMALLINT-Datensatzfeld ist auf SQL_PARAM_INPUT für einen Eingabeparameter, SQL_PARAM_INPUT_OUTPUT für einen Ein-/Ausgabeparameter, SQL_PARAM_OUTPUT für einen Ausgabeparameter, SQL_PARAM_INPUT_OUTPUT_STREAM für einen Eingabe-/Ausgabe-Stream-Parameter oder SQL_PARAM_OUTPUT_STREAM für einen Output-Stream-Parameter gesetzt. Sie ist standardmäßig auf SQL_PARAM_INPUT eingestellt.

Für ein IPD wird das Feld standardmäßig auf SQL_PARAM_INPUT gesetzt, wenn das IPD nicht automatisch vom Treiber ausgefüllt wird (das Attribut SQL_ATTR_ENABLE_AUTO_IPD Anweisung ist SQL_FALSE). Eine Anwendung sollte dieses Feld im IPD für Parameter setzen, die keine Eingabeparameter sind.

SQL_DESC_PRECISION [Alle]
Dieses SQLSMALLINT-Datensatzfeld enthält die Anzahl der Ziffern für einen exakten numerischen Typ, die Anzahl der Bits in der Mantisse (binäre Genauigkeit) für einen ungefähren numerischen Typ oder die Anzahl der Ziffern in der Bruchteilsekundenkomponente für den Datentyp SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP oder SQL_INTERVAL_SECOND. Dieses Feld ist für alle anderen Datentypen undefiniert.

Der Wert in diesem Feld kann sich von dem Wert für "Präzision" unterscheiden, wie er in ODBC 2*.x* definiert ist. Weitere Informationen finden Sie in Anhang D: Datentypen.

SQL_DESC_ROWVER [Implementierungsbeschreibungen]
Dieses SQLSMALLINTrecord-Feld zeigt an, ob eine Spalte automatisch vom DBMS geändert wird, wenn eine Zeile aktualisiert wird (zum Beispiel eine Spalte vom Typ "timestamp" in SQL Server). Der Wert dieses Datensatzfeldes wird auf SQL_TRUE gesetzt, wenn die Spalte eine Zeilenversionierungsspalte ist, und auf SQL_FALSE anderweitig. Dieses Spaltenattribut ähnelt dem Aufruf von SQLSpecialColumns mit IdentifierType SQL_ROWVER, um zu bestimmen, ob eine Spalte automatisch aktualisiert wird.

SQL_DESC_SCALE [Alle]
Dieses SQLSMALLINT-Datensatzfeld enthält die definierte Skala für dezimale und numerische Datentypen. Das Feld ist für alle anderen Datentypen undefiniert.

Der Wert in diesem Feld kann sich von dem Wert für "Skalierung" unterscheiden, wie er in ODBC 2*.x* definiert ist. Weitere Informationen finden Sie in Anhang D: Datentypen.

SQL_DESC_SCHEMA_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält den Schemanamen der Basistabelle, die die Spalte enthält. Der Rückgabewert ist treiberabhängig, wenn die Spalte ein Ausdruck ist oder wenn die Spalte Teil einer Ansicht ist. Wenn die Datenquelle keine Schemata unterstützt oder der Schemaname nicht bestimmt werden kann, enthält diese Variable eine leere Zeichenkette.

SQL_DESC_SEARCHABLE [IRDs]
Dieses schreibgeschützte SQLSMALLINT-Datensatzfeld ist auf einen der folgenden Werte gesetzt:

  • SQL_PRED_NONE, wenn die Spalte in einer WHERE-Klausel nicht verwendet werden kann. (Dies entspricht dem SQL_UNSEARCHABLE-Wert in ODBC 2*.x*.)

  • SQL_PRED_CHAR, ob die Spalte in einer WHERE-Klausel verwendet werden kann, aber nur mit dem LIKE-Prädikat . (Dies entspricht dem SQL_LIKE_ONLY-Wert in ODBC 2*.x*.)

  • SQL_PRED_BASIC, ob die Spalte in einer WHERE-Klausel mit allen Vergleichsoperatoren außer LIKE verwendet werden kann. (Dies entspricht dem SQL_EXCEPT_LIKE-Wert in ODBC 2*.x*.)

  • SQL_PRED_SEARCHABLE, ob die Spalte in einer WHERE-Klausel mit jedem Vergleichsoperator verwendet werden kann.

SQL_DESC_TABLE_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält den Namen der Basistabelle, die diese Spalte enthält. Der Rückgabewert ist treiberabhängig, wenn die Spalte ein Ausdruck ist oder wenn die Spalte Teil einer Ansicht ist.

SQL_DESC_TYPE [Alle]
Dieses SQLSMALLINT-Datensatzfeld spezifiziert den prägnanten SQL- oder C-Datentyp für alle Datentypen außer Datum, Zeit- und Intervalldaten. Für die Datentypen Datetime und Intervall gibt dieses Feld den verbosen Datentyp an, nämlich SQL_DATETIME oder SQL_INTERVAL.

Immer wenn dieses Feld SQL_DATETIME oder SQL_INTERVAL enthält, muss das SQL_DESC_DATETIME_INTERVAL_CODE Feld den entsprechenden Untercode für den Kompakttypen enthalten. Für Datetime-Datentypen enthält SQL_DESC_TYPE SQL_DATETIME, und das SQL_DESC_DATETIME_INTERVAL_CODE-Feld enthält einen Untercode für den spezifischen Datetime-Datentyp. Für Intervalldatentypen enthält SQL_DESC_TYPE SQL_INTERVAL und das SQL_DESC_DATETIME_INTERVAL_CODE-Feld enthält einen Untercode für den spezifischen Intervalldatentyp.

Die Werte in den Feldern SQL_DESC_TYPE und SQL_DESC_CONCISE_TYPE sind voneinander abhängig. Jedes Mal, wenn eines der Felder gesetzt wird, muss auch das andere gesetzt werden. SQL_DESC_TYPE kann durch einen Aufruf von SQLSetDescField oder SQLSetDescRec gesetzt werden. SQL_DESC_CONCISE_TYPE kann durch einen Aufruf von SQLBindCol , SQLBindParameter oder SQLSetDescField gesetzt werden.

Wenn SQL_DESC_TYPE auf einen prägnanten Datentyp gesetzt ist, der nicht ein Intervall- oder Datetime-Datentyp ist, wird das SQL_DESC_CONCISE_TYPE-Feld auf denselben Wert gesetzt und das SQL_DESC_DATETIME_INTERVAL_CODE-Feld auf 0.

Wenn SQL_DESC_TYPE auf den ausführlichen Date-Time- oder Interval-Datentyp (SQL_DATETIME oder SQL_INTERVAL) gesetzt ist und das SQL_DESC_DATETIME_INTERVAL_CODE Feld auf den entsprechenden Untercode gesetzt ist, wird das SQL_DESC_CONCISE-Feld TYPE auf den entsprechenden kompakten Typ gesetzt. Wenn man versucht, SQL_DESC_TYPE auf einen der prägnanten Datums- oder Intervalltypen zu setzen, erhält man SQLSTATE HY021 (inkonsistente Deskriptorinformation).

Wenn das SQL_DESC_TYPE-Feld durch einen Aufruf von SQLBindCol, SQLBindParameter oder SQLSetDescField gesetzt wird, werden die folgenden Felder auf die folgenden Standardwerte gesetzt, wie in der untenstehenden Tabelle gezeigt. Die Werte der verbleibenden Felder desselben Datensatzes sind undefiniert.

Wert der SQL_DESC_TYPE Andere Körper, die implizit setzen
SQL_CHAR, SQL_VARCHAR, SQL_C_CHAR, SQL_C_VARCHAR SQL_DESC_LENGTH ist auf 1 gesetzt. SQL_DESC_PRECISION ist auf 0 gesetzt.
SQL_DATETIME Wenn SQL_DESC_DATETIME_INTERVAL_CODE auf SQL_CODE_DATE oder SQL_CODE_TIME gesetzt ist, wird SQL_DESC_PRECISION auf 0 gesetzt. Wenn es auf SQL_DESC_TIMESTAMP gesetzt ist, steht SQL_DESC_PRECISION auf 6.
SQL_DECIMAL, SQL_NUMERIC, SQL_C_NUMERIC SQL_DESC_SCALE ist auf 0 gesetzt. SQL_DESC_PRECISION wird auf die implementierungsdefinierte Präzision für den jeweiligen Datentyp gesetzt.

Siehe SQL to C: Numeric für Informationen darüber, wie man einen SQL_C_NUMERIC Wert manuell bindet.
SQL_FLOAT, SQL_C_FLOAT SQL_DESC_PRECISION ist für SQL_FLOAT auf die implementierungsdefinierte Standardgenauigkeit gesetzt.
SQL_INTERVAL Wenn SQL_DESC_DATETIME_INTERVAL_CODE auf einen Intervalldatentyp gesetzt ist, wird SQL_DESC_DATETIME_INTERVAL_PRECISION auf 2 gesetzt (die Standard-Intervall-Führungsgenauigkeit). Wenn das Intervall eine Sekundenkomponente hat, wird SQL_DESC_PRECISION auf 6 gesetzt (die Standardgenauigkeit der Intervallsekunden).

Wenn eine Anwendung SQLSetDescField aufruft, um Felder eines Deskriptors zu setzen, anstatt SQLSetDescRec aufzurufen, muss die Anwendung zunächst den Datentyp deklarieren. Wenn dies geschieht, werden die anderen in der vorherigen Tabelle angegebenen Felder implizit gesetzt. Wenn einer der implizit gesetzten Werte inakzeptabel ist, kann die Anwendung SQLSetDescField oder SQLSetDescRec aufrufen, um den unzulässigen Wert explizit festzulegen.

SQL_DESC_TYPE_NAME [Implementierungsbeschreibungen]
Dieses schreibgeschützte SQLCHAR * Datensatzfeld enthält den quellenabhängigen Typnamen (zum Beispiel "CHAR", "VARCHAR" und so weiter). Ist der Name des Datentyps unbekannt, enthält diese Variable eine leere Zeichenkette.

SQL_DESC_UNNAMED [Implementierungsbeschreibungen]
Dieser SQLSMALLINT-Datensatz-in-a-Zeilen-Deskriptor wird vom Treiber entweder auf SQL_NAMED oder SQL_UNNAMED gesetzt, wenn er das SQL_DESC_NAME Feld setzt. Wenn das SQL_DESC_NAME-Feld ein Spaltenalias enthält oder das Spaltenalias nicht anwendbar ist, setzt der Treiber das SQL_DESC_UNNAMED Feld auf SQL_NAMED. Wenn eine Anwendung das SQL_DESC_NAME Feld eines IPD auf einen Parameternamen oder Alias setzt, setzt der Treiber das SQL_DESC_UNNAMED Feld des IPD auf SQL_NAMED. Gibt es keinen Spaltennamen oder ein Spaltenalias, setzt der Treiber das SQL_DESC_UNNAMED Feld auf SQL_UNNAMED.

Eine Anwendung kann das SQL_DESC_UNNAMED Feld eines IPD auf SQL_UNNAMED setzen. Ein Treiber gibt SQLSTATE HY091 (Invalid Descriptor Field Identifier) zurück, wenn eine Anwendung versucht, das SQL_DESC_UNNAMED Feld eines IPD auf SQL_NAMED zu setzen. Das SQL_DESC_UNNAMED Feld einer IRD ist schreibgeschützt; SQLSTATE HY091 (Invalid Descriptor Field Identifier) wird zurückgegeben, wenn eine Anwendung versucht, es zu setzen.

SQL_DESC_UNSIGNED [Implementierungsbeschreibungen]
Dieses schreibgeschützte SQLSMALLINT-Datensatzfeld wird auf SQL_TRUE gesetzt, wenn der Spaltentyp unsigniert oder nicht numerisch ist, oder SQL_FALSE, wenn der Spaltentyp signiert ist.

SQL_DESC_UPDATABLE [IRDs]
Dieses schreibgeschützte SQLSMALLINT-Datensatzfeld ist auf einen der folgenden Werte gesetzt:

  • SQL_ATTR_READ_ONLY, wenn die Spalte für die Ergebnismenge schreibgeschützt ist.

  • SQL_ATTR_WRITE wenn die Spalte der Ergebnismenge Lese-Schreib-Spalte ist.

  • SQL_ATTR_READWRITE_UNKNOWN, wenn nicht bekannt ist, ob die Spalte der Ergebnismenge aktualisierbar ist oder nicht.

SQL_DESC_UPDATABLE beschreibt die Aktualisierungsfähigkeit der Spalte im Ergebnisset, nicht die Spalte in der Basistabelle. Die Aktualisierungsfähigkeit der Spalte in der Basistabelle, auf der diese Ergebnismenge basiert, kann sich von dem Wert in diesem Feld unterscheiden. Ob eine Spalte aktualisiert werden kann, hängt vom Datentyp, Benutzerrechten und der Definition der Ergebnismenge selbst ab. Wenn unklar ist, ob eine Spalte aktualisiert werden kann, sollte SQL_ATTR_READWRITE_UNKNOWN zurückgegeben werden.

Konsistenzkontrollen

Eine Konsistenzprüfung wird vom Treiber automatisch durchgeführt, wann immer eine Anwendung einen Wert für das SQL_DESC_DATA_PTR Feld von ARD, APD oder IPD übergibt. Wenn eines der Felder mit anderen Feldern inkonsistent ist, gibt SQLSetDescField SQLSTATE HY021 (Inkonsistente Deskriptorinformation) zurück. Weitere Informationen finden Sie unter "Consistency Check" in SQLSetDescRec.

Informationen zum Siehe
Bindung einer Spalte SQLBindCol-Funktion
Bindung eines Parameters SQLBindParameter-Funktion
Ein Deskriptorfeld erhalten SQLGetDescField-Funktion
Mehrere Deskriptorfelder erhalten SQLGetDescRec-Funktion
Setzen mehrerer Deskriptorfelder SQLSetDescRec-Funktion

Siehe auch

ODBC-Headerdateien
ODBC-API-Referenz