SQLSetDescField-Funktion
Konformität
Version eingeführt: ODBC 3.0 Standards Compliance: ISO 92
Zusammenfassung
SQLSetDescField legt den Wert eines einzelnen Felds eines Deskriptordatensatzes fest.
Syntax
SQLRETURN SQLSetDescField(
SQLHDESC DescriptorHandle,
SQLSMALLINT RecNumber,
SQLSMALLINT FieldIdentifier,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength);
Argumente
DescriptorHandle
[Eingabe] Deskriptorhandle.
RecNumber
[Eingabe] Gibt den Deskriptordatensatz an, der das Feld enthält, das die Anwendung festlegen möchte. Deskriptordatensätze werden von 0 nummeriert, wobei datensatznummer 0 der Lesezeichendatensatz ist. Das RecNumber-Argument wird für Headerfelder ignoriert.
FieldIdentifier
[Eingabe] Gibt das Feld des Deskriptors an, dessen Wert festgelegt werden soll. Weitere Informationen finden Sie unter "FieldIdentifier Argument" im Abschnitt "Kommentare".
ValuePtr
[Eingabe] Zeiger auf einen Puffer, der die Deskriptorinformationen oder einen ganzzahligen Wert enthält. 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 von ODBC definiertes Feld ist und ValuePtr auf eine Zeichenfolge oder einen binären Puffer zeigt, sollte dieses Argument die Länge von *ValuePtr aufweisen. Bei Zeichenfolgendaten sollte dieses Argument die Anzahl der Bytes in der Zeichenfolge enthalten.
Wenn FieldIdentifier ein von ODBC definiertes Feld und ValuePtr eine ganze Zahl ist, wird BufferLength ignoriert.
Wenn FieldIdentifier ein vom Treiber definiertes Feld ist, gibt die Anwendung dem Treiber-Manager die Art des Felds an, indem sie das BufferLength-Argument festlegt. BufferLength kann die folgenden Werte aufweisen:
Wenn ValuePtr ein Zeiger auf eine Zeichenfolge ist, ist BufferLength die Länge der Zeichenfolge oder SQL_NTS.
Wenn ValuePtr ein Zeiger auf einen binären Puffer ist, platziert die Anwendung das Ergebnis des makros SQL_LEN_BINARY_ATTR(length) in BufferLength. Dadurch wird ein negativer Wert in BufferLength platziert.
Wenn ValuePtr ein Zeiger auf einen anderen Wert als eine Zeichenfolge oder eine binäre Zeichenfolge ist, sollte BufferLength den Wert SQL_IS_POINTER haben.
Wenn ValuePtr einen Wert mit fester Länge enthält, ist BufferLength entweder SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT oder SQL_IS_USMALLINT.
Gibt zurück
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnose
Wenn SQLSetDescField SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugeordneter SQLSTATE-Wert abgerufen werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_DESC und einem Handle von DescriptorHandle aufgerufen wird. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLSetDescField zurückgegeben werden, und die einzelnen Werte im Kontext dieser Funktion werden erläutert. die Notation "(DM)" steht vor den Beschreibungen von SQLSTATEs, die vom Treiber-Manager zurückgegeben werden. Der Rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.
SQLSTATE | Fehler | BESCHREIBUNG |
---|---|---|
01000 | Allgemeine Warnung | Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
01S02 | Optionswert geändert | Der Treiber hat den in *ValuePtr angegebenen Wert (wenn ValuePtr ein Zeiger war) oder den Wert in ValuePtr (wenn ValuePtr ein ganzzahliger Wert war) nicht unterstützt, oder *ValuePtr war aufgrund von Implementierungsbedingungen ungültig, sodass der Treiber einen ähnlichen Wert ersetzt hat. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
07009 | Ungültiger Deskriptorindex | Das Argument FieldIdentifier war ein Datensatzfeld, das RecNumber-Argument war 0, und das Argument DescriptorHandle verweist auf ein IPD-Handle. Das RecNumber-Argument war kleiner als 0, und das DescriptorHandle-Argument verweist auf eine ARD oder eine APD. Das RecNumber-Argument war größer als die maximale Anzahl von Spalten oder Parametern, die die Datenquelle unterstützen kann, und das Argument DescriptorHandle verweist auf eine APD oder ARD. (DM) Das Argument FieldIdentifier wurde SQL_DESC_COUNT, und das Argument *ValuePtr war kleiner als 0. Das RecNumber-Argument war gleich 0, und das Argument DescriptorHandle verweist auf eine implizit zugeordnete APD. (Dieser Fehler tritt bei einem explizit zugeordneten Anwendungsdeskriptor nicht auf, da nicht bekannt ist, ob ein explizit zugeordneter Anwendungsdeskriptor bis zur Ausführungszeit eine 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 Argument FieldIdentifier wurde SQL_DESC_NAME, und das BufferLength-Argument war ein Wert, der größer als SQL_MAX_IDENTIFIER_LEN war. |
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 seine Ursache. |
HY001 | Fehler bei der Speicherbelegung | Der Treiber konnte keinen Arbeitsspeicher zuordnen, der für die Unterstützung der Ausführung oder Fertigstellung der Funktion erforderlich ist. |
HY010 | Funktionssequenzfehler | (DM) Das DescriptorHandle wurde einem StatementHandle zugeordnet, für das eine asynchron ausgeführte Funktion (nicht diese) aufgerufen wurde und noch ausgeführt wurde, als diese Funktion aufgerufen wurde. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations oder SQLSetPos wurde für den StatementHandle aufgerufen, dem descriptorHandle zugeordnet und SQL_NEED_DATA zurückgegeben wurde. Diese Funktion wurde aufgerufen, bevor Daten für alle Daten bei der Ausführungsparameter oder -spalten gesendet wurden. (DM) Eine asynchron ausgeführte Funktion wurde für das Verbindungshandle aufgerufen, das dem DescriptorHandle zugeordnet ist. Diese asynchrone Funktion wurde noch ausgeführt, als die FUNKTION SQLSetDescField aufgerufen wurde. (DM) SQLExecute, SQLExecDirect oder SQLMoreResults wurde für eines der Anweisungshandles aufgerufen, die dem DescriptorHandle zugeordnet sind, und SQL_PARAM_DATA_AVAILABLE zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle gestreamten Parameter abgerufen wurden. |
HY013 | Fehler bei der Speicherverwaltung | Der Funktionsaufruf konnte nicht verarbeitet werden, weil auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund von geringen Arbeitsspeicherbedingungen. |
HY016 | Ein Implementierungszeilendeskriptor kann nicht geändert werden. | Das Argument DescriptorHandle war einer IRD zugeordnet, und das Argument FieldIdentifier wurde nicht SQL_DESC_ARRAY_STATUS_PTR oder 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 oder einen gültigen treiberspezifischen SQL-Typ (für IPDs) oder einen gültigen ODBC C-Typ (für APDs oder ARDs). Die während einer Konsistenzprüfung überprüften Deskriptorinformationen waren nicht konsistent. (Siehe "Konsistenzprüfung" in SQLSetDescRec.) |
HY090 | Ungültige Zeichenfolgen- oder Pufferlänge | (DM) *ValuePtr ist eine Zeichenfolge, und BufferLength war kleiner als null, war aber nicht gleich SQL_NTS. (DM) Der Treiber war ein ODBC 2*.x*-Treiber, der Deskriptor ein ARD-Treiber, das ColumnNumber-Argument wurde auf 0 festgelegt, und der für das Argument BufferLength angegebene Wert war nicht gleich 4. |
HY091 | Ungültiger Deskriptorfeldbezeichner | Der für das FieldIdentifier-Argument angegebene Wert war kein von ODBC definiertes Feld und kein durch die Implementierung definierter Wert. Das Argument FieldIdentifier war für das Argument DescriptorHandle ungültig. Das Argument FieldIdentifier war ein schreibgeschütztes, von ODBC definiertes Feld. |
HY092 | Ungültiger Attribut-/Optionsbezeichner | Der Wert in *ValuePtr war für das FieldIdentifier-Argument ungültig. Das FieldIdentifier-Argument wurde SQL_DESC_UNNAMED, und ValuePtr wurde SQL_NAMED. |
HY105 | Ungültiger Parametertyp | (DM) Der für das feld SQL_DESC_PARAMETER_TYPE angegebene Wert war ungültig. (Weitere Informationen finden Sie im Abschnitt "InputOutputType Argument" in SQLBindParameter.) |
HY117 | Die Verbindung wird aufgrund eines unbekannten Transaktionsstatus angehalten. Nur Trennen und schreibgeschützte Funktionen sind zulässig. | (DM) Weitere Informationen zum Angehaltenen Zustand finden Sie unter Neuerungen in ODBC 3.8. |
HYT01 | Verbindungstimeout abgelaufen | Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung reagiert hat. Der Zeitraum für das Verbindungstimeout wird über SQLSetConnectAttr festgelegt, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Der Treiber unterstützt diese Funktion nicht. | (DM) Der dem DescriptorHandle zugeordnete Treiber unterstützt die Funktion nicht. |
Kommentare
Eine Anwendung kann SQLSetDescField aufrufen, um jedes Deskriptorfeld einzeln festzulegen. Ein Aufruf von SQLSetDescField legt ein einzelnes Feld in einem einzelnen Deskriptor fest. Diese Funktion kann aufgerufen werden, um jedes Feld in einem beliebigen Deskriptortyp festzulegen, sofern das Feld festgelegt werden kann. (Siehe tabelle weiter unten in diesem Abschnitt.)
Hinweis
Wenn ein Aufruf von SQLSetDescField fehlschlägt, ist der Inhalt des durch das Argument RecNumber identifizierten Deskriptordatensatzes nicht definiert.
Andere Funktionen können aufgerufen werden, um mehrere Deskriptorfelder mit einem einzigen Aufruf der Funktion festzulegen. Die SQLSetDescRec-Funktion legt eine Vielzahl von Feldern fest, die sich auf den Datentyp und den Puffer auswirken, 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 kann verwendet werden, um eine vollständige Spezifikation für die Bindung einer Spalte oder eines Parameters zu erstellen. Diese Funktionen legen eine bestimmte Gruppe von Deskriptorfeldern mit einem Funktionsaufruf fest.
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. Dadurch werden die Bindungspuffer geändert, ohne SQLBindCol oder SQLBindParameter aufzurufen, sodass eine Anwendung SQL_DESC_DATA_PTR ändern kann, ohne andere Felder zu ändern, z. B. SQL_DESC_DATA_TYPE.
Wenn eine Anwendung SQLSetDescField aufruft, um ein anderes Feld als SQL_DESC_COUNT oder die zurückgestellten Felder SQL_DESC_DATA_PTR, SQL_DESC_OCTET_LENGTH_PTR oder SQL_DESC_INDICATOR_PTR festzulegen, wird der Datensatz ungebunden.
Descriptorheaderfelder werden durch Aufrufen von SQLSetDescField mit dem entsprechenden FieldIdentifier festgelegt. Viele Headerfelder sind auch Anweisungsattribute, sodass sie auch durch einen Aufruf von SQLSetStmtAttr festgelegt werden können. Dadurch können Anwendungen ein Deskriptorfeld festlegen, ohne zuerst ein Deskriptorhandle abzurufen. Wenn SQLSetDescField aufgerufen wird, um ein Headerfeld festzulegen, wird das Argument RecNumber ignoriert.
Eine RecNumber von 0 wird verwendet, um Lesezeichenfelder festzulegen.
Hinweis
Das Anweisungsattribut SQL_ATTR_USE_BOOKMARKS sollte immer festgelegt werden, bevor SQLSetDescField aufgerufen wird, um Lesezeichenfelder festzulegen. Dies ist zwar nicht obligatorisch, wird jedoch dringend empfohlen.
Sequenz der Deskriptorfelder festlegen
Beim Festlegen von Deskriptorfeldern durch Aufrufen von SQLSetDescField muss die Anwendung eine bestimmte Sequenz befolgen:
Die Anwendung muss zuerst das Feld SQL_DESC_TYPE, SQL_DESC_CONCISE_TYPE oder SQL_DESC_DATETIME_INTERVAL_CODE festlegen.
Nachdem eines dieser Felder festgelegt wurde, kann die Anwendung ein Attribut eines Datentyps festlegen, und der Treiber legt Datentypattributefelder auf die entsprechenden Standardwerte für den Datentyp fest. Durch die automatische Standardeinstellung von Typattributefeldern wird sichergestellt, dass der Deskriptor immer einsatzbereit ist, sobald die Anwendung einen Datentyp angegeben hat. Wenn die Anwendung explizit ein Datentypattribute festlegt, überschreibt sie das Standardattribute.
Nachdem eines der in Schritt 1 aufgeführten Felder festgelegt und Datentypattribute festgelegt wurden, kann die Anwendung SQL_DESC_DATA_PTR festlegen. Dadurch wird eine Konsistenzprüfung der Deskriptorfelder aufgefordert. Wenn die Anwendung den Datentyp oder die Attribute nach dem Festlegen des felds SQL_DESC_DATA_PTR ändert, legt der Treiber SQL_DESC_DATA_PTR auf einen NULL-Zeiger fest, wodurch die Bindung des Datensatzes aufheben wird. Dadurch wird die Anwendung gezwungen, die richtigen Schritte nacheinander auszuführen, bevor der Deskriptordatensatz verwendet werden kann.
Initialisierung der Deskriptorfelder
Wenn ein Deskriptor zugeordnet wird, können die Felder im Deskriptor mit einem Standardwert initialisiert, ohne Standardwert initialisiert oder für den Typ des Deskriptors undefiniert werden. In den folgenden Tabellen wird die Initialisierung jedes Felds für jeden Deskriptortyp angegeben, wobei "D" angibt, dass das Feld mit einem Standardwert initialisiert wird, und "ND", das angibt, dass das Feld ohne Standard initialisiert wird. Wenn eine Zahl angezeigt wird, ist der Standardwert des Felds diese Zahl. Die Tabellen geben auch an, ob ein Feld Lese-/Schreibzugriff (R/W) oder schreibgeschützt (R) ist.
Die Felder einer IRD verfügen erst über einen Standardwert, nachdem die Anweisung vorbereitet oder ausgeführt wurde und der IRD aufgefüllt wurde, nicht, wenn das Anweisungshandle oder -deskriptor zugeordnet wurde. Bis die IRD aufgefüllt wurde, gibt jeder Versuch, Zugriff auf ein Feld einer IRD zu erhalten, einen Fehler zurück.
Einige Deskriptorfelder sind für einen oder mehrere, aber nicht alle Deskriptortypen (ARDs und IRDs sowie APDs und IPDs) definiert. Wenn ein Feld für einen Deskriptortyp undefiniert ist, wird es von keiner der Funktionen benötigt, die diesen Deskriptor verwenden.
Die Felder, auf die SQLGetDescField zugreifen kann, können nicht unbedingt von SQLSetDescField festgelegt werden. Felder, die von SQLSetDescField festgelegt werden können, sind in den folgenden Tabellen aufgeführt.
Die Initialisierung von Headerfeldern ist in der folgenden Tabelle beschrieben.
Name des Kopfzeilenfelds | 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: Nicht verwendete IPD: Nicht verwendet | ARD:[1] APD:[1] IRD: Nicht verwendete IPD: Nicht verwendet |
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 ptr |
SQL_DESC_BIND_OFFSET_PTR | SQLLEN* | ARD: R/W APD: R/W IRD: Nicht verwendete IPD: Nicht verwendet | ARD: Null ptr APD: Null ptr IRD: Nicht verwendete IPD: Nicht verwendet |
SQL_DESC_BIND_TYPE | SQLINTEGER | ARD: R/W APD: R/W IRD: Nicht verwendete IPD: Nicht verwendet | ARD: SQL_BIND_BY_COLUMN APD: SQL_BIND_BY_COLUMN IRD: Nicht verwendet IPD: Nicht verwendet |
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: Nicht verwendete APD: Nicht verwendete IRD: R/W IPD: R/W | ARD: Nicht verwendete APD: Nicht verwendete IRD: Null ptr IPD: Null ptr |
[1] Diese Felder werden nur definiert, wenn die IPD automatisch vom Treiber aufgefüllt wird. Andernfalls sind sie nicht definiert. Wenn eine Anwendung versucht, diese Felder festzulegen, wird SQLSTATE HY091 (Ungültiger Deskriptorfeldbezeichner) zurückgegeben.
Die Initialisierung von Datensatzfeldern ist in der folgenden Tabelle dargestellt.
Name des Datensatzfelds | Typ | R/W | Standard |
---|---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE | SQLINTEGER | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_BASE_COLUMN_NAME | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_BASE_TABLE_NAME | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_CASE_SENSITIVE | SQLINTEGER | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: R | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: D[1] |
SQL_DESC_CATALOG_NAME | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_CONCISE_TYPE | SQLSMALLINT | ARD: R/W APD: R/W IRD: R IPD: R/W | ARD: SQL_C_ STANDARD-APD: SQL_C_ STANDARD IRD: D IPD: ND |
SQL_DESC_DATA_PTR | SQLPOINTER | ARD: R/W APD: R/W IRD: Nicht verwendete IPD: Nicht verwendet | ARD: Null ptr APD: Null ptr IRD: Nicht verwendete IPD: Nicht verwendet[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: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_FIXED_PREC_SCALE | SQLSMALLINT | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: R | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: D[1] |
SQL_DESC_INDICATOR_PTR | SQLLEN * | ARD: R/W APD: R/W IRD: Nicht verwendete IPD: Nicht verwendet | ARD: Null ptr APD: Null ptr IRD: Nicht verwendete IPD: Nicht verwendet |
SQL_DESC_LABEL | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
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: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_LITERAL_SUFFIX | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_LOCAL_TYPE_NAME | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: R | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: D[1] |
SQL_DESC_NAME | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: R/W | ARD: ND APD: ND IRD: D IPD: ND |
SQL_DESC_NULLABLE | SQLSMALLINT | ARD: Nicht verwendete APD: Nicht verwendete 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: Nicht verwendete IPD: Nicht verwendet | ARD: Null ptr APD: Null ptr IRD: Nicht verwendete IPD: Nicht verwendet |
SQL_DESC_PARAMETER_TYPE | SQLSMALLINT | ARD: Nicht verwendete APD: Nicht verwendete IRD: Nicht verwendete IPD: R/W | ARD: Nicht verwendete APD: Nicht verwendete IRD: Nicht verwendete 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: Nicht verwendet APD: Nicht verwendet IRD: R IPD: R |
ARD: Nicht verwendet APD: Nicht verwendet IRD: ND IPD: ND |
SQL_DESC_SCALE | 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: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_SEARCHABLE | SQLSMALLINT | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
SQL_DESC_TABLE_NAME | SQLCHAR* | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
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: Nicht verwendete APD: Nicht verwendete IRD: R IPD: R | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: D[1] |
SQL_DESC_UNNAMED | SQLSMALLINT | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: R/W | ARD: ND APD: ND IRD: D IPD: ND |
SQL_DESC_UNSIGNED | SQLSMALLINT | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: R | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: D[1] |
SQL_DESC_UPDATABLE | SQLSMALLINT | ARD: Nicht verwendete APD: Nicht verwendete IRD: R IPD: Nicht verwendet | ARD: Nicht verwendete APD: Nicht verwendete IRD: D IPD: Nicht verwendet |
[1] Diese Felder werden nur definiert, wenn die IPD automatisch vom Treiber aufgefüllt wird. Andernfalls sind sie nicht definiert. Wenn eine Anwendung versucht, diese Felder festzulegen, wird SQLSTATE HY091 (Ungültiger Deskriptorfeldbezeichner) zurückgegeben.
[2] Das Feld SQL_DESC_DATA_PTR in der IPD kann so festgelegt werden, dass eine Konsistenzprüfung erzwungen wird. Bei einem nachfolgenden Aufruf von SQLGetDescField oder SQLGetDescRec ist der Treiber nicht erforderlich, um den Wert zurückzugeben, auf den SQL_DESC_DATA_PTR festgelegt wurde.
FieldIdentifier-Argument
Das Argument FieldIdentifier gibt das festzulegende Deskriptorfeld an. Ein Deskriptor enthält den Deskriptorheader, der aus den im nächsten Abschnitt "Headerfelder" beschriebenen Kopfzeilenfeldern und null oder mehr Deskriptoreinträgen besteht, die aus den Datensatzfeldern bestehen, die im Abschnitt "Headerfelder" beschrieben werden.
Kopfzeilenfelder
Jeder Deskriptor verfügt über einen Header, der aus den 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 abrufen, aber nicht ändern. Das Feld wird vom Treiber auf SQL_DESC_ALLOC_AUTO festgelegt, wenn der Deskriptor automatisch vom Treiber zugeordnet wurde. Er wird vom Treiber auf SQL_DESC_ALLOC_USER festgelegt, wenn der Deskriptor explizit von der Anwendung zugeordnet wurde.
SQL_DESC_ARRAY_SIZE [Anwendungsdeskriptoren]
In ARDs gibt dieses SQLULEN-Headerfeld die Anzahl der Zeilen im Rowset an. Dies ist die Anzahl der Zeilen, die durch einen Aufruf von SQLFetch oder SQLFetchScroll zurückgegeben oder durch einen Aufruf von SQLBulkOperations oder SQLSetPos betrieben werden sollen.
In APDs gibt dieses SQLULEN-Headerfeld die Anzahl der Werte für jeden Parameter an.
Der Standardwert dieses Felds ist 1. Wenn SQL_DESC_ARRAY_SIZE größer als 1 ist, 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 Felds.
Dieses Feld in der ARD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_ROW_ARRAY_SIZE festgelegt werden. Dieses Feld in der APD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_PARAMSET_SIZE festgelegt 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), Zeilenvorgangsarray (ARD) und Parameteroperationsarray (APD).
Im IRD verweist dieses Headerfeld auf ein Zeilenstatusarray mit Statuswerten nach einem Aufruf von SQLBulkOperations, SQLFetch, SQLFetchScroll oder SQLSetPos. Das Array enthält so viele Elemente, wie zeilen im Rowset vorhanden sind. Die Anwendung muss ein Array von SQLUSMALLINTs zuordnen und dieses Feld so festlegen, dass es auf das Array zeigt. Das Feld ist standardmäßig auf einen NULL-Zeiger festgelegt. Der Treiber füllt das Array auf , es sei denn, das SQL_DESC_ARRAY_STATUS_PTR Feld ist auf einen NULL-Zeiger festgelegt. In diesem Fall werden keine Statuswerte generiert und das Array nicht aufgefüllt.
Achtung
Das Treiberverhalten ist undefiniert, wenn die Anwendung die Elemente des Zeilenstatusarrays festlegt, auf das vom SQL_DESC_ARRAY_STATUS_PTR Feld des IRD verwiesen wird.
Das Array wird zunächst durch einen Aufruf von SQLBulkOperations, SQLFetch, SQLFetchScroll oder SQLSetPos aufgefüllt. Wenn der Aufruf nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgegeben hat, ist der Inhalt des Arrays, auf das dieses Feld verweist, nicht definiert. Die Elemente im Array können die folgenden Werte enthalten:
SQL_ROW_SUCCESS: Die Zeile wurde erfolgreich abgerufen und hat sich seit dem letzten Abruf nicht geändert.
SQL_ROW_SUCCESS_WITH_INFO: Die Zeile wurde erfolgreich abgerufen und hat sich seit dem letzten Abruf nicht geändert. Es wurde jedoch eine Warnung zur Zeile zurückgegeben.
SQL_ROW_ERROR: Fehler beim Abrufen der Zeile.
SQL_ROW_UPDATED: Die Zeile wurde erfolgreich abgerufen und seit dem letzten Abruf aktualisiert. Wenn die Zeile erneut abgerufen wird, ist ihr Status SQL_ROW_SUCCESS.
SQL_ROW_DELETED: Die Zeile wurde gelöscht, seit sie zuletzt abgerufen wurde.
SQL_ROW_ADDED: Die Zeile wurde von SQLBulkOperations eingefügt. Wenn die Zeile erneut abgerufen wird, ist ihr Status SQL_ROW_SUCCESS.
SQL_ROW_NOROW: Das Rowset überlappt das Ende des Resultsets, und es wurde keine Zeile zurückgegeben, die diesem Element des Zeilenstatusarrays entsprach.
Dieses Feld im IRD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_ROW_STATUS_PTR festgelegt werden.
Das feld SQL_DESC_ARRAY_STATUS_PTR der IRD ist erst gültig, nachdem SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgegeben wurde. Wenn der Rückgabecode nicht einer davon ist, ist die Position, auf die SQL_DESC_ROWS_PROCESSED_PTR verweist, undefiniert.
In der IPD verweist dieses Headerfeld auf ein Parameterstatusarray, das Statusinformationen für jeden Satz von Parameterwerten nach einem Aufruf von SQLExecute oder SQLExecDirect enthält. Wenn der Aufruf von SQLExecute oder SQLExecDirect nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgegeben hat, ist der Inhalt des Arrays, auf das von diesem Feld verwiesen wird, nicht definiert. Die Anwendung muss ein Array von SQLUSMALLINTs zuordnen und dieses Feld so festlegen, dass es auf das Array zeigt. Der Treiber füllt das Array auf , es sei denn, das SQL_DESC_ARRAY_STATUS_PTR Feld ist auf einen NULL-Zeiger festgelegt. In diesem Fall werden keine Statuswerte generiert und das Array nicht aufgefüllt. Die Elemente im Array können die folgenden 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. Warnungsinformationen sind jedoch in der Struktur der Diagnosedaten verfügbar.
SQL_PARAM_ERROR: Fehler bei der Verarbeitung dieses Parameterssatzes. Zusätzliche Fehlerinformationen sind in der Diagnosedatenstruktur verfügbar.
SQL_PARAM_UNUSED: Dieser Parametersatz wurde nicht verwendet, möglicherweise aufgrund der Tatsache, dass ein vorheriger Parametersatz einen Fehler verursacht hat, der die weitere Verarbeitung abbricht, oder weil SQL_PARAM_IGNORE für diesen Satz von Parametern in dem Array festgelegt wurde, das durch das SQL_DESC_ARRAY_STATUS_PTR Feld der APD angegeben wurde.
SQL_PARAM_DIAG_UNAVAILABLE: Diagnoseinformationen sind nicht verfügbar. Ein Beispiel hierfür ist, wenn der Treiber Arrays von Parametern als monolithische Einheit behandelt und daher diese Ebene von Fehlerinformationen nicht generiert.
Dieses Feld in der IPD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_PARAM_STATUS_PTR festgelegt werden.
In der ARD verweist dieses Headerfeld auf ein Zeilenvorgangsarray von Werten, die von der Anwendung festgelegt werden können, um anzugeben, ob diese Zeile für SQLSetPos-Vorgänge ignoriert werden soll. Die Elemente im Array können die folgenden Werte enthalten:
SQL_ROW_PROCEED: Die Zeile ist im Massenvorgang mit SQLSetPos enthalten. (Diese Einstellung garantiert nicht, dass der Vorgang in der Zeile ausgeführt wird. Wenn die Zeile den Status SQL_ROW_ERROR im IRD-Zeilenstatusarray aufweist, kann der Treiber den Vorgang möglicherweise nicht in der Zeile ausführen.)
SQL_ROW_IGNORE: Die Zeile wird vom Massenvorgang mit SQLSetPos ausgeschlossen.
Wenn keine Elemente des Arrays festgelegt sind, werden alle Zeilen in den Massenvorgang eingeschlossen. Wenn der Wert im Feld SQL_DESC_ARRAY_STATUS_PTR der ARD ein NULL-Zeiger ist, werden alle Zeilen in den Massenvorgang eingeschlossen. die Interpretation ist identisch, als wenn der Zeiger auf ein gültiges Array verweist und alle Elemente des Arrays SQL_ROW_PROCEED wurden. Wenn ein Element im Array auf SQL_ROW_IGNORE festgelegt ist, wird der Wert im Zeilenstatusarray für die ignorierte Zeile nicht geändert.
Dieses Feld in der ARD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_ROW_OPERATION_PTR festgelegt werden.
In der APD verweist dieses Headerfeld auf ein Parametervorgangsarray von Werten, die von der Anwendung festgelegt werden können, um anzugeben, ob dieser Satz von Parametern ignoriert werden soll, wenn SQLExecute oder SQLExecDirect aufgerufen wird. Die Elemente im Array können die folgenden Werte enthalten:
SQL_PARAM_PROCEED: Der Satz von Parametern ist im SQLExecute - oder SQLExecDirect-Aufruf enthalten.
SQL_PARAM_IGNORE: Der Satz von Parametern wird vom SQLExecute- oder SQLExecDirect-Aufruf ausgeschlossen.
Wenn keine Elemente des Arrays festgelegt sind, werden alle Sätze von Parametern im Array in den SQLExecute - oder SQLExecDirect-Aufrufen verwendet. Wenn der Wert im Feld SQL_DESC_ARRAY_STATUS_PTR der APD ein NULL-Zeiger ist, werden alle Parametersätze verwendet. die Interpretation ist identisch, als wenn der Zeiger auf ein gültiges Array verweist und alle Elemente des Arrays SQL_PARAM_PROCEED wurden.
Dieses Feld in der APD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_PARAM_OPERATION_PTR festgelegt werden.
SQL_DESC_BIND_OFFSET_PTR [Anwendungsdeskriptoren]
Dieses SQLLEN *-Headerfeld zeigt auf den Bindungsoffset. Sie ist standardmäßig auf einen NULL-Zeiger festgelegt. Wenn es sich bei diesem Feld nicht um einen NULL-Zeiger handelt, leitet der Treiber den Zeiger ab und fügt zum Abrufzeitpunkt den abgeleiteten Wert jedem der zurückgestellten Felder hinzu, die im Deskriptordatensatz (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR) einen wert ungleich NULL aufweisen, und verwendet bei der Bindung die neuen Zeigerwerte.
Der Bindungsoffset wird immer direkt den Werten in den Feldern SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR hinzugefügt. Wenn der Offset in einen anderen Wert geändert wird, wird der neue Wert weiterhin direkt dem Wert in jedem Deskriptorfeld hinzugefügt. Der neue Offset wird dem Feldwert und keinem früheren Offset hinzugefügt.
Dieses Feld ist ein verzögertes Feld: Es wird nicht zu dem Zeitpunkt verwendet, zu dem es festgelegt wird, sondern zu einem späteren Zeitpunkt vom Treiber verwendet, wenn er Adressen für Datenpuffer ermitteln muss.
Dieses Feld in der ARD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_ROW_BIND_OFFSET_PTR festgelegt werden. Dieses Feld in der ARD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_PARAM_BIND_OFFSET_PTR festgelegt werden.
Weitere Informationen finden Sie in der Beschreibung der zeilenweisen Bindung in SQLFetchScroll und SQLBindParameter.
SQL_DESC_BIND_TYPE [Anwendungsdeskriptoren]
Dieses SQLUINTEGER-Headerfeld legt die Bindungsausrichtung fest, die zum Binden von Spalten oder Parametern verwendet werden soll.
In ARDs gibt dieses Feld die Bindungsausrichtung an, wenn SQLFetchScroll oder SQLFetch im zugeordneten Anweisungshandle aufgerufen wird.
Um spaltenweise Bindung für Spalten auszuwählen, ist dieses Feld auf SQL_BIND_BY_COLUMN (Standard) festgelegt.
Dieses Feld in der ARD kann auch durch Aufrufen von SQLSetStmtAttr mit dem SQL_ATTR_ROW_BIND_TYPE-Attribut festgelegt werden.
In APDs gibt dieses Feld die Bindungsausrichtung an, die für dynamische Parameter verwendet werden soll.
Um spaltenweise Bindung für Parameter auszuwählen, ist dieses Feld auf SQL_BIND_BY_COLUMN (Standard) festgelegt.
Dieses Feld in der APD kann auch durch Aufrufen von SQLSetStmtAttr mit dem SQL_ATTR_PARAM_BIND_TYPE-Attribut festgelegt werden.
SQL_DESC_COUNT [Alle]
Dieses SQLSMALLINT-Headerfeld gibt den 1-basierten Index des Datensatzes mit der höchsten Nummerierung an, der Daten enthält. Wenn der Treiber die Datenstruktur für den Deskriptor festlegt, muss er auch das feld SQL_DESC_COUNT festlegen, um anzuzeigen, wie viele Datensätze signifikant sind. Wenn eine Anwendung eine Instanz dieser Datenstruktur zuordnet, muss sie nicht angeben, für wie viele Datensätze Raum reserviert werden soll. Da die Anwendung den Inhalt der Datensätze angibt, führt der Treiber alle erforderlichen Aktionen aus, um sicherzustellen, dass das Deskriptorhandle auf eine Datenstruktur mit der entsprechenden Größe verweist.
SQL_DESC_COUNT ist nicht die Anzahl aller Datenspalten, die gebunden sind (wenn sich das Feld in einer ARD befindet) oder aller Parameter, die gebunden sind (wenn sich das Feld in einer APD befindet), sondern die Anzahl des am höchsten nummerierten Datensatzes. Wenn die Spalte oder der Parameter mit der höchsten Nummerierung ungebunden ist, wird SQL_DESC_COUNT in die Nummer der nächsthöchsten Spalte oder des nächsthöheren Parameters geändert. Wenn eine Spalte oder ein Parameter mit einer Zahl, die kleiner als die Anzahl der spalte mit der höchsten Nummerierung ist, ungebunden ist (durch Aufrufen von SQLBindCol mit dem TargetValuePtr-Argument , das auf einen NULL-Zeiger festgelegt ist, oder SQLBindParameter , wenn das Argument ParameterValuePtr auf einen NULL-Zeiger festgelegt ist), wird SQL_DESC_COUNT nicht geändert. Wenn zusätzliche Spalten oder Parameter mit Zahlen gebunden sind, die größer sind als der Datensatz mit der höchsten Nummerierung, der Daten enthält, erhöht der Treiber automatisch den Wert im Feld SQL_DESC_COUNT. Wenn alle Spalten durch Aufrufen von SQLFreeStmt mit der Option SQL_UNBIND ungebunden sind, werden die SQL_DESC_COUNT Felder in der ARD und IRD auf 0 festgelegt. Wenn SQLFreeStmt mit der Option SQL_RESET_PARAMS aufgerufen wird, werden die SQL_DESC_COUNT Felder in APD und IPD auf 0 festgelegt.
Der Wert in SQL_DESC_COUNT kann von einer Anwendung explizit festgelegt werden, indem SQLSetDescField aufgerufen wird. Wenn der Wert in SQL_DESC_COUNT explizit verringert wird, werden alle Datensätze entfernt, deren Zahlen größer als der neue Wert in SQL_DESC_COUNT sind. Wenn der Wert in SQL_DESC_COUNT explizit auf 0 festgelegt ist und sich das Feld in einer ARD befindet, werden alle Datenpuffer mit Ausnahme einer gebundenen Lesezeichenspalte freigegeben.
Die Datensatzanzahl in diesem Feld einer ARD enthält keine gebundene Lesezeichenspalte. Die einzige Möglichkeit zum Aufheben der Bindung einer Lesezeichenspalte besteht darin, das SQL_DESC_DATA_PTR Feld auf einen NULL-Zeiger festzulegen.
SQL_DESC_ROWS_PROCESSED_PTR [Implementierungsdeskriptoren]
In einem IRD verweist dieses SQLULEN *-Headerfeld auf einen Puffer, der die Anzahl der Zeilen enthält, die nach einem Aufruf von SQLFetch oder SQLFetchScroll abgerufen wurden, oder die Anzahl der Zeilen, die in einem Massenvorgang betroffen sind, der von einem Aufruf von SQLBulkOperations oder SQLSetPos ausgeführt wird, einschließlich Fehlerzeilen.
In einer IPD verweist dieses SQLUINTEGER *-Headerfeld auf einen Puffer, der die Anzahl der verarbeiteten Parametersätze enthält, einschließlich Fehlersätzen. Es wird keine Zahl zurückgegeben, wenn es sich um einen NULL-Zeiger handelt.
SQL_DESC_ROWS_PROCESSED_PTR ist erst 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 Puffer füllt, auf den dieses Feld verweist, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, ist der Inhalt des Puffers nicht definiert, es sei denn, er gibt SQL_NO_DATA zurück. In diesem Fall wird der Wert im Puffer auf 0 festgelegt.
Dieses Feld in der ARD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_ROWS_FETCHED_PTR festgelegt werden. Dieses Feld in der APD kann auch durch Aufrufen von SQLSetStmtAttr mit dem attribut SQL_ATTR_PARAMS_PROCESSED_PTR festgelegt werden.
Der Puffer, auf den dieses Feld verweist, wird von der Anwendung zugeordnet. Es handelt sich um einen verzögerten Ausgabepuffer, der vom Treiber festgelegt wird. Sie ist standardmäßig auf einen NULL-Zeiger festgelegt.
Datensatzfelder
Jeder Deskriptor enthält einen oder mehrere Datensätze, die aus Feldern bestehen, die je nach Deskriptortyp entweder Spaltendaten oder dynamische Parameter definieren. Jeder Datensatz ist eine vollständige Definition einer einzelnen Spalte oder eines einzelnen Parameters.
SQL_DESC_AUTO_UNIQUE_VALUE [IRDs]
Dieses schreibgeschützte SQLINTEGER-Datensatzfeld enthält SQL_TRUE, wenn es sich bei der Spalte um eine automatisch inkrementierende Spalte handelt, oder SQL_FALSE, wenn die Spalte keine automatisch inkrementierende Spalte ist. Dieses Feld ist schreibgeschützt, aber die zugrunde liegende automatisch inkrementierende Spalte ist nicht unbedingt schreibgeschützt.
SQL_DESC_BASE_COLUMN_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält den Basisspaltennamen für die Resultsetspalte. Wenn kein Basisspaltenname vorhanden ist (wie bei Spalten, die Ausdrücke sind), enthält diese Variable eine leere Zeichenfolge.
SQL_DESC_BASE_TABLE_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält den Basistabellennamen für die Resultsetspalte. Wenn ein Basistabellenname nicht definiert werden kann oder nicht zutreffend ist, enthält diese Variable eine leere Zeichenfolge.
SQL_DESC_CASE_SENSITIVE [Implementierungsdeskriptoren]
Dieses schreibgeschützte SQLINTEGER-Datensatzfeld enthält SQL_TRUE, wenn die Groß-/Kleinschreibung bei Sortierungen oder Vergleichen bei der Spalte oder dem Parameter beachtet wird, oder SQL_FALSE, wenn bei Sortierungen und Vergleichen die Groß-/Kleinschreibung nicht beachtet wird oder wenn es sich um eine Spalte ohne Zeichenfolge handelt.
SQL_DESC_CATALOG_NAME [IRDs]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält den Katalog für die Basistabelle, die die Spalte enthält. Der Rückgabewert ist treiberabhängig, wenn es sich bei der Spalte um einen Ausdruck handelt 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 eine leere Zeichenfolge.
SQL_DESC_CONCISE_TYPE [Alle]
Dieses SQLSMALLINT-Headerfeld gibt den präzisen Datentyp für alle Datentypen an, einschließlich der Datentypen datetime und interval.
Die Werte in den Feldern SQL_DESC_CONCISE_TYPE, SQL_DESC_TYPE und SQL_DESC_DATETIME_INTERVAL_CODE hängen voneinander ab. Jedes Mal, wenn eines der Felder festgelegt wird, muss auch das andere festgelegt werden. SQL_DESC_CONCISE_TYPE kann durch einen Aufruf von SQLBindCol , SQLBindParameter oder SQLSetDescField festgelegt werden. SQL_DESC_TYPE kann durch einen Aufruf von SQLSetDescField oder SQLSetDescRec festgelegt werden.
Wenn SQL_DESC_CONCISE_TYPE auf einen prägnanten Datentyp festgelegt ist, der sich nicht auf einen Intervall- oder datetime-Datentyp bezieht, wird das SQL_DESC_TYPE Feld auf den gleichen Wert und das SQL_DESC_DATETIME_INTERVAL_CODE Feld auf 0 festgelegt.
Wenn SQL_DESC_CONCISE_TYPE auf den präzisen Datentyp datetime oder interval festgelegt ist, wird das SQL_DESC_TYPE Feld auf den entsprechenden ausführlichen Typ (SQL_DATETIME oder SQL_INTERVAL) festgelegt, und das SQL_DESC_DATETIME_INTERVAL_CODE Feld wird auf den entsprechenden Untercode festgelegt.
SQL_DESC_DATA_PTR [Anwendungsdeskriptoren 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 verzögertes Feld. Es wird nicht zum Zeitpunkt der Festlegung verwendet, sondern zu einem späteren Zeitpunkt vom Treiber zum Abrufen von Daten verwendet.
Die durch das SQL_DESC_DATA_PTR Feld der ARD angegebene Spalte ist ungebunden, wenn das TargetValuePtr-Argument in einem Aufruf von SQLBindCol ein NULL-Zeiger ist oder wenn das SQL_DESC_DATA_PTR Feld in der ARD durch einen Aufruf von SQLSetDescField oder SQLSetDescRec auf einen NULL-Zeiger festgelegt wird. Andere Felder sind nicht betroffen, wenn das SQL_DESC_DATA_PTR Feld auf einen NULL-Zeiger festgelegt ist.
Wenn der Aufruf von SQLFetch oder SQLFetchScroll , der den Puffer ausfüllt, auf den dieses Feld verweist, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, ist der Inhalt des Puffers nicht definiert.
Wenn das SQL_DESC_DATA_PTR Feld einer APD, ARD oder IPD festgelegt ist, überprüft der Treiber, ob der Wert im feld SQL_DESC_TYPE einen der gültigen ODBC C-Datentypen oder einen treiberspezifischen Datentyp enthält und dass alle anderen Felder, die sich auf die Datentypen auswirken, konsistent sind. Das Auffordern einer Konsistenzprüfung ist die einzige Verwendung des felds SQL_DESC_DATA_PTR einer IPD. Wenn eine Anwendung das SQL_DESC_DATA_PTR Feld einer IPD festlegt und später SQLGetDescField für dieses Feld aufruft, wird sie nicht unbedingt den wert zurückgegeben, den sie festgelegt hatte. Weitere Informationen finden Sie unter "Konsistenzprüfungen" in SQLSetDescRec.
SQL_DESC_DATETIME_INTERVAL_CODE [Alle]
Dieses SQLSMALLINT-Datensatzfeld enthält den Untercode für den bestimmten Datetime- oder Intervalldatentyp, wenn das SQL_DESC_TYPE Feld SQL_DATETIME oder SQL_INTERVAL ist. Dies gilt sowohl für SQL- als auch für C-Datentypen. Der Code besteht aus dem Datentypnamen, wobei "CODE" entweder durch "TYPE" oder "C_TYPE" (für datetime-Typen) ersetzt wird, oder "CODE", ersetzt durch "INTERVAL" oder "C_INTERVAL" (für Intervalltypen).
Wenn SQL_DESC_TYPE und SQL_DESC_CONCISE_TYPE in einem Anwendungsdeskriptor auf SQL_C_DEFAULT festgelegt sind und der Deskriptor keinem Anweisungshandle zugeordnet ist, ist der Inhalt von SQL_DESC_DATETIME_INTERVAL_CODE nicht definiert.
Dieses Feld kann für die in der folgenden Tabelle aufgeführten datetime-Datentypen festgelegt werden.
Datum-/Zeittypen | 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 festgelegt 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 zu diesem Feld finden Sie unter Datentypbezeichner und -deskriptoren.
SQL_DESC_DATETIME_INTERVAL_PRECISION [Alle]
Dieses SQLINTEGER-Datensatzfeld enthält die intervallführende Genauigkeit, wenn das SQL_DESC_TYPE Feld SQL_INTERVAL ist. Wenn das feld SQL_DESC_DATETIME_INTERVAL_CODE auf einen Intervalldatentyp festgelegt ist, wird dieses Feld auf die Standardgenauigkeit für das Führende Intervall festgelegt.
SQL_DESC_DISPLAY_SIZE [IRDs]
Dieses schreibgeschützte SQLINTEGER-Datensatzfeld enthält die maximale Anzahl von Zeichen, die zum Anzeigen der Daten aus der Spalte erforderlich sind.
SQL_DESC_FIXED_PREC_SCALE [Implementierungsdeskriptoren]
Dieses schreibgeschützte SQLSMALLINT-Datensatzfeld ist auf SQL_TRUE festgelegt, wenn es sich bei der Spalte um eine exakte numerische Spalte handelt und eine feste Genauigkeit und eine Skalierung ungleich Null aufweist, oder auf SQL_FALSE, wenn es sich bei der Spalte nicht um eine exakte numerische Spalte mit fester Genauigkeit und Skalierung handelt.
SQL_DESC_INDICATOR_PTR [Anwendungsdeskriptoren]
In ARDs verweist dieses SQLLEN *-Datensatzfeld auf die Indikatorvariable. Diese Variable enthält SQL_NULL_DATA, wenn der Spaltenwert NULL ist. Bei APDs ist die Indikatorvariable auf SQL_NULL_DATA festgelegt, um dynamische NULL-Argumente anzugeben. Andernfalls ist die Variable null (es sei denn, die Werte in SQL_DESC_INDICATOR_PTR und SQL_DESC_OCTET_LENGTH_PTR sind derselbe Zeiger).
Wenn das SQL_DESC_INDICATOR_PTR Feld in einer ARD ein NULL-Zeiger ist, wird der Treiber daran gehindert, Informationen darüber zurückzugeben, ob die Spalte NULL ist oder nicht. Wenn die Spalte NULL ist und SQL_DESC_INDICATOR_PTR ein NULL-Zeiger ist, wird SQLSTATE 22002 (Indikatorvariable erforderlich, aber nicht angegeben) zurückgegeben, wenn der Treiber versucht, den Puffer nach einem Aufruf von SQLFetch oder SQLFetchScroll aufzufüllen. Wenn der Aufruf von SQLFetch oder SQLFetchScroll nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgegeben hat, ist der Inhalt des Puffers nicht definiert.
Das feld SQL_DESC_INDICATOR_PTR bestimmt, ob das Feld festgelegt ist, auf das SQL_DESC_OCTET_LENGTH_PTR zeigt. Wenn der Datenwert für eine Spalte NULL ist, legt der Treiber die Indikatorvariable auf SQL_NULL_DATA fest. Das Feld, auf das von SQL_DESC_OCTET_LENGTH_PTR verweist, wird dann nicht festgelegt. Wenn während des Abrufs kein NULL-Wert gefunden wird, wird der Puffer, auf den SQL_DESC_INDICATOR_PTR verweist, auf Null festgelegt, und der Puffer, auf den SQL_DESC_OCTET_LENGTH_PTR zeigt, wird auf die Länge der Daten festgelegt.
Wenn das SQL_DESC_INDICATOR_PTR Feld in einer APD ein NULL-Zeiger ist, kann die Anwendung diesen Deskriptordatensatz nicht verwenden, um NULL-Argumente anzugeben.
Dieses Feld ist ein verzögertes Feld: Es wird nicht zu dem Zeitpunkt verwendet, zu dem es festgelegt wird, sondern zu einem späteren Zeitpunkt vom Treiber verwendet, um die NULL-Zulässigkeit (für ARDs) anzugeben oder um die NULL-Zulässigkeit (für APDs) zu bestimmen.
SQL_DESC_LABEL [IRDs]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält die Spaltenbeschriftung oder den Titel. Wenn die Spalte keine Bezeichnung aufweist, enthält diese Variable den Spaltennamen. Wenn die Spalte unbenannt und nicht beschriftet ist, enthält diese Variable eine leere Zeichenfolge.
SQL_DESC_LENGTH [Alle]
Dieses SQLULEN-Datensatzfeld ist entweder die maximale oder tatsächliche Länge einer Zeichenfolge in Zeichen oder ein binärer Datentyp in Bytes. Dies 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-Terminierungszeichen aus, das die Zeichenfolge beendet. Für Werte, deren Typ SQL_TYPE_DATE, SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP oder einem der SQL-Intervalldatentypen ist, weist dieses Feld die Länge in Zeichen der Zeichenfolgendarstellung des datetime- oder interval-Werts auf.
Der Wert in diesem Feld kann sich vom Wert für "length" unterscheiden, wie in ODBC 2*.x* definiert. Weitere Informationen finden Sie im Anhang D: Datentypen.
SQL_DESC_LITERAL_PREFIX [IRDs]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält die Zeichen, die der Treiber als Präfix für ein Literal dieses Datentyps erkennt. Diese Variable enthält eine leere Zeichenfolge für einen Datentyp, für den kein Literalpräfix gilt.
SQL_DESC_LITERAL_SUFFIX [IRDs]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält die Zeichen, die der Treiber als Suffix für ein Literal dieses Datentyps erkennt. Diese Variable enthält eine leere Zeichenfolge für einen Datentyp, für den kein Literalsuffix gilt.
SQL_DESC_LOCAL_TYPE_NAME [Implementierungsdeskriptoren]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält einen beliebigen lokalisierten Namen (native Sprache) für den Datentyp, der sich vom regulären Namen des Datentyps unterscheiden kann. Wenn kein lokalisierter Name vorhanden ist, wird eine leere Zeichenfolge zurückgegeben. Dieses Feld dient nur zu Anzeigezwecken.
SQL_DESC_NAME [Implementierungsdeskriptoren]
Dieses SQLCHAR *-Datensatzfeld in einem Zeilendeskriptor enthält den Spaltenalias, falls zutreffend. Wenn der Spaltenalias nicht zutrifft, wird der Spaltenname zurückgegeben. In beiden Fällen legt der Treiber das Feld SQL_DESC_UNNAMED auf SQL_NAMED fest, wenn er das feld SQL_DESC_NAME festlegt. Wenn kein Spaltenname oder Spaltenalias vorhanden ist, gibt der Treiber eine leere Zeichenfolge im Feld SQL_DESC_NAME zurück und legt das feld SQL_DESC_UNNAMED auf SQL_UNNAMED fest.
Eine Anwendung kann das SQL_DESC_NAME Feld einer IPD auf einen Parameternamen oder Alias festlegen, um gespeicherte Prozedurparameter nach Name anzugeben. (Weitere Informationen finden Sie unter Bindungsparameter nach Name (benannte Parameter).) Das SQL_DESC_NAME Feld einer IRD ist ein schreibgeschütztes Feld. SQLSTATE HY091 (Ungültiger Deskriptorfeldbezeichner) wird zurückgegeben, wenn eine Anwendung versucht, sie festzulegen.
In IPDs ist dieses Feld nicht definiert, wenn der Treiber keine benannten Parameter unterstützt. Wenn der Treiber benannte Parameter unterstützt und Parameter beschreiben kann, wird der Parametername in diesem Feld zurückgegeben.
SQL_DESC_NULLABLE [Implementierungsdeskriptoren]
In IRDs wird dieses schreibgeschützte SQLSMALLINT-Datensatzfeld SQL_NULLABLE, wenn die Spalte NULL-Werte aufweisen kann, SQL_NO_NULLS, wenn die Spalte keine NULL-Werte aufweist, oder SQL_NULLABLE_UNKNOWN, wenn nicht bekannt ist, ob die Spalte NULL-Werte akzeptiert. Dieses Feld bezieht sich auf die Resultsetspalte, nicht auf die Basisspalte.
In IPDs ist dieses Feld immer auf SQL_NULLABLE festgelegt, da dynamische Parameter immer nullfähig 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 feld SQL_DESC_TYPE ein ungefährer numerischer Datentyp ist, da das feld SQL_DESC_PRECISION die Anzahl der Bits enthält. Dieses Feld enthält den Wert 10, wenn der Datentyp im feld SQL_DESC_TYPE ein exakter numerischer Datentyp ist, da das feld SQL_DESC_PRECISION die Anzahl der Dezimalstellen enthält. Dieses Feld ist für alle nicht numerischen Datentypen auf 0 festgelegt.
SQL_DESC_OCTET_LENGTH [Alle]
Dieses SQLLEN-Datensatzfeld enthält die Länge einer Zeichenfolge oder eines binären Datentyps in Bytes. Bei Zeichen- oder Binärtypen mit fester Länge ist dies die tatsächliche Länge in Bytes. Bei Zeichen- oder Binärtypen mit variabler Länge ist dies die maximale Länge in Bytes. Dieser Wert schließt immer Leerzeichen für das NULL-Terminierungszeichen für Implementierungsdeskriptoren aus und enthält immer Leerzeichen für das NULL-Terminierungszeichen 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 Eingabe-/Ausgabeparameter definiert.
SQL_DESC_OCTET_LENGTH_PTR [Anwendungsdeskriptoren]
Dieses SQLLEN *-Datensatzfeld verweist auf eine Variable, die die Gesamtlänge in Bytes eines dynamischen Arguments (für Parameterdeskriptoren) oder eines gebundenen Spaltenwerts (für Zeilendeskriptoren) enthält.
Bei einer APD wird dieser Wert für alle Argumente außer Zeichenfolge und Binärdatei ignoriert. wenn dieses Feld auf SQL_NTS zeigt, muss das dynamische Argument NULL-endend sein. Um anzugeben, dass ein gebundener Parameter ein Data-at-Execution-Parameter ist, legt eine Anwendung dieses Feld im entsprechenden Datensatz der APD auf eine Variable fest, die zur Ausführungszeit den Wert SQL_DATA_AT_EXEC oder das Ergebnis des SQL_LEN_DATA_AT_EXEC Makros enthält. Wenn mehr als ein solches Feld vorhanden ist, kann SQL_DESC_DATA_PTR auf einen Wert festgelegt werden, der den Parameter eindeutig identifiziert, damit die Anwendung ermitteln kann, welcher Parameter angefordert wird.
Wenn das OCTET_LENGTH_PTR Feld einer ARD ein NULL-Zeiger ist, gibt der Treiber keine Längeninformationen für die Spalte zurück. Wenn das SQL_DESC_OCTET_LENGTH_PTR Feld einer APD ein NULL-Zeiger ist, geht der Treiber davon aus, dass Zeichenfolgen und Binärwerte NULL-endend sind. (Binärwerte sollten nicht null-beendet sein, sondern eine Länge erhalten, um abgeschnitten zu werden.)
Wenn der Aufruf von SQLFetch oder SQLFetchScroll , der den Puffer füllt, auf den dieses Feld verweist, nicht SQL_SUCCESS oder SQL_SUCCESS_WITH_INFO zurückgibt, ist der Inhalt des Puffers nicht definiert. Dieses Feld ist ein verzögertes Feld. Es wird nicht zum Zeitpunkt des Festlegens verwendet, sondern zu einem späteren Zeitpunkt vom Treiber verwendet, um die Oktettlänge der Daten zu bestimmen oder anzugeben.
SQL_DESC_PARAMETER_TYPE [IPDs]
Dieses SQLSMALLINT-Datensatzfeld ist auf SQL_PARAM_INPUT für einen Eingabeparameter festgelegt, SQL_PARAM_INPUT_OUTPUT für einen Eingabe-/Ausgabeparameter, SQL_PARAM_OUTPUT für einen Ausgabeparameter, SQL_PARAM_INPUT_OUTPUT_STREAM für einen eingabe-/ausgabestreamten Parameter oder SQL_PARAM_OUTPUT_STREAM für einen ausgabegestreamten Parameter. Sie ist standardmäßig auf SQL_PARAM_INPUT festgelegt.
Bei einer IPD ist das Feld standardmäßig auf SQL_PARAM_INPUT festgelegt, wenn die IPD nicht automatisch vom Treiber aufgefüllt wird (das Attribut der SQL_ATTR_ENABLE_AUTO_IPD-Anweisung ist SQL_FALSE). Eine Anwendung sollte dieses Feld in der IPD für Parameter festlegen, die keine Eingabeparameter sind.
SQL_DESC_PRECISION [Alle]
Dieses SQLSMALLINT-Datensatzfeld enthält die Anzahl der Ziffern für einen genauen numerischen Typ, die Anzahl der Bits in der Mantissa (binäre Genauigkeit) für einen ungefähren numerischen Typ oder die Anzahl der Ziffern in der Sekundenbruchteilkomponente für den Datentyp SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP oder SQL_INTERVAL_SECOND. Dieses Feld ist für alle anderen Datentypen nicht definiert.
Der Wert in diesem Feld kann sich vom Wert für "Precision" unterscheiden, der in ODBC 2*.x* definiert ist. Weitere Informationen finden Sie unter Anhang D: Datentypen.
SQL_DESC_ROWVER [Implementierungsdeskriptoren]
Dieses FELD SQLSMALLINTrecord gibt an, ob eine Spalte automatisch vom DBMS geändert wird, wenn eine Zeile aktualisiert wird (z. B. eine Spalte vom Typ "Timestamp" in SQL Server). Der Wert dieses Datensatzfelds wird auf SQL_TRUE festgelegt, wenn es sich bei der Spalte um eine Zeilenversionsspalte handelt, andernfalls auf SQL_FALSE. Dieses Spaltenattribute ähnelt dem Aufrufen von SQLSpecialColumns mit IdentifierType of SQL_ROWVER, um zu bestimmen, ob eine Spalte automatisch aktualisiert wird.
SQL_DESC_SCALE [Alle]
Dieses SQLSMALLINT-Datensatzfeld enthält die definierte Skalierung für dezimale und numerische Datentypen. Das Feld ist für alle anderen Datentypen nicht definiert.
Der Wert in diesem Feld kann sich vom Wert für "skalierung" unterscheiden, wie er in ODBC 2*.x* definiert ist. Weitere Informationen finden Sie unter 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 es sich bei der Spalte um einen Ausdruck handelt oder wenn die Spalte Teil einer Ansicht ist. Wenn die Datenquelle keine Schemas unterstützt oder der Schemaname nicht bestimmt werden kann, enthält diese Variable eine leere Zeichenfolge.
SQL_DESC_SEARCHABLE [IRDs]
Dieses schreibgeschützte SQLSMALLINT-Datensatzfeld ist auf einen der folgenden Werte festgelegt:
SQL_PRED_NONE, wenn die Spalte nicht in einer WHERE-Klausel verwendet werden kann. (Dies entspricht dem SQL_UNSEARCHABLE Wert in ODBC 2*.x*.)
SQL_PRED_CHAR, wenn 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 mit Ausnahme von 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 einem beliebigen 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 es sich bei der Spalte um einen Ausdruck handelt oder wenn die Spalte Teil einer Ansicht ist.
SQL_DESC_TYPE [Alle]
Dieses SQLSMALLINT-Datensatzfeld gibt den präzisen SQL- oder C-Datentyp für alle Datentypen mit Ausnahme von datetime und interval an. Für die Datentypen datetime und interval gibt dieses Feld den ausführlichen Datentyp an, der SQL_DATETIME oder SQL_INTERVAL ist.
Wenn dieses Feld SQL_DATETIME oder SQL_INTERVAL enthält, muss das feld SQL_DESC_DATETIME_INTERVAL_CODE die entsprechende Untercodierung für den prägnanten Typ enthalten. Bei datetime-Datentypen enthält SQL_DESC_TYPE SQL_DATETIME, und das Feld SQL_DESC_DATETIME_INTERVAL_CODE enthält eine Untercodierung für den bestimmten datetime-Datentyp. Bei Intervalldatentypen enthält SQL_DESC_TYPE SQL_INTERVAL und das Feld SQL_DESC_DATETIME_INTERVAL_CODE eine Untercodierung für den spezifischen Intervalldatentyp.
Die Werte in den Feldern SQL_DESC_TYPE und SQL_DESC_CONCISE_TYPE hängen voneinander ab. Jedes Mal, wenn eines der Felder festgelegt wird, muss auch das andere festgelegt werden. SQL_DESC_TYPE kann durch einen Aufruf von SQLSetDescField oder SQLSetDescRec festgelegt werden. SQL_DESC_CONCISE_TYPE kann durch einen Aufruf von SQLBindCol , SQLBindParameter oder SQLSetDescField festgelegt werden.
Wenn SQL_DESC_TYPE auf einen anderen prägnanten Datentyp als einen Intervall- oder datetime-Datentyp festgelegt ist, wird das SQL_DESC_CONCISE_TYPE Feld auf den gleichen Wert und das SQL_DESC_DATETIME_INTERVAL_CODE Feld auf 0 festgelegt.
Wenn SQL_DESC_TYPE auf den ausführlichen Datetime- oder Intervalldatentyp (SQL_DATETIME oder SQL_INTERVAL) festgelegt ist und das feld SQL_DESC_DATETIME_INTERVAL_CODE auf die entsprechende Untercodierung festgelegt ist, wird das Feld SQL_DESC_CONCISE TYP auf den entsprechenden prägnanten Typ festgelegt. Wenn Sie versuchen, SQL_DESC_TYPE auf einen der präzisen Datetime- oder Intervalltypen festzulegen, wird SQLSTATE HY021 (Inkonsistente Deskriptorinformationen) zurückgegeben.
Wenn das Feld SQL_DESC_TYPE durch einen Aufruf von SQLBindCol, SQLBindParameter oder SQLSetDescField festgelegt wird, werden die folgenden Felder auf die folgenden Standardwerte festgelegt, wie in der folgenden Tabelle dargestellt. Die Werte der verbleibenden Felder desselben Datensatzes sind nicht definiert.
Wert von SQL_DESC_TYPE | Andere Felder implizit festgelegt |
---|---|
SQL_CHAR, SQL_VARCHAR, SQL_C_CHAR, SQL_C_VARCHAR | SQL_DESC_LENGTH ist auf 1 festgelegt. SQL_DESC_PRECISION ist auf 0 festgelegt. |
SQL_DATETIME | Wenn SQL_DESC_DATETIME_INTERVAL_CODE auf SQL_CODE_DATE oder SQL_CODE_TIME festgelegt ist, wird SQL_DESC_PRECISION auf 0 festgelegt. Wenn sie auf SQL_DESC_TIMESTAMP festgelegt ist, wird SQL_DESC_PRECISION auf 6 festgelegt. |
SQL_DECIMAL, SQL_NUMERIC, SQL_C_NUMERIC | SQL_DESC_SCALE ist auf 0 festgelegt. SQL_DESC_PRECISION ist auf die implementierungsdefinierte Genauigkeit für den jeweiligen Datentyp festgelegt. Informationen zum manuellen Binden eines SQL_C_NUMERIC Werts finden Sie unter SQL to C: Numeric . |
SQL_FLOAT, SQL_C_FLOAT | SQL_DESC_PRECISION ist auf die von der Implementierung definierte Standardgenauigkeit für SQL_FLOAT festgelegt. |
SQL_INTERVAL | Wenn SQL_DESC_DATETIME_INTERVAL_CODE auf einen Intervalldatentyp festgelegt ist, wird SQL_DESC_DATETIME_INTERVAL_PRECISION auf 2 (die Standardgenauigkeit des Intervalls mit Führendem Intervall) festgelegt. Wenn das Intervall über eine Sekundenkomponente verfügt, wird SQL_DESC_PRECISION auf 6 (die Standardgenauigkeit von Sekunden) festgelegt. |
Wenn eine Anwendung SQLSetDescField aufruft, um Felder eines Deskriptors festzulegen, anstatt SQLSetDescRec aufzurufen, muss die Anwendung zuerst den Datentyp deklarieren. Wenn dies der Fall ist, werden die anderen Felder, die in der vorherigen Tabelle angegeben sind, implizit festgelegt. Wenn implizit festgelegte Werte inakzeptabel sind, kann die Anwendung SQLSetDescField oder SQLSetDescRec aufrufen, um den inakzeptablen Wert explizit festzulegen.
SQL_DESC_TYPE_NAME [Implementierungsdeskriptoren]
Dieses schreibgeschützte SQLCHAR *-Datensatzfeld enthält den Namen des datenquellenabhängigen Typs (z. B. "CHAR", "VARCHAR" usw.). Wenn der Datentypname unbekannt ist, enthält diese Variable eine leere Zeichenfolge.
SQL_DESC_UNNAMED [Implementierungsdeskriptoren]
Dieses SQLSMALLINT-Datensatzfeld in einem Zeilendeskriptor wird vom Treiber entweder auf SQL_NAMED oder SQL_UNNAMED festgelegt, wenn er das SQL_DESC_NAME Feld festlegt. Wenn das Feld SQL_DESC_NAME einen Spaltenalias enthält oder der Spaltenalias nicht angewendet wird, legt der Treiber das feld SQL_DESC_UNNAMED auf SQL_NAMED fest. Wenn eine Anwendung das SQL_DESC_NAME Feld einer IPD auf einen Parameternamen oder Alias festlegt, legt der Treiber das SQL_DESC_UNNAMED Feld der IPD auf SQL_NAMED fest. Wenn kein Spaltenname oder Spaltenalias vorhanden ist, legt der Treiber das feld SQL_DESC_UNNAMED auf SQL_UNNAMED fest.
Eine Anwendung kann das SQL_DESC_UNNAMED Feld einer IPD auf SQL_UNNAMED festlegen. Ein Treiber gibt SQLSTATE HY091 (Ungültiger Deskriptorfeldbezeichner) zurück, wenn eine Anwendung versucht, das SQL_DESC_UNNAMED Feld einer IPD auf SQL_NAMED festzulegen. Das SQL_DESC_UNNAMED Feld einer IRD ist schreibgeschützt. SQLSTATE HY091 (Ungültiger Deskriptorfeldbezeichner) wird zurückgegeben, wenn eine Anwendung versucht, ihn festzulegen.
SQL_DESC_UNSIGNED [Implementierungsdeskriptoren]
Dieses schreibgeschützte SQLSMALLINT-Datensatzfeld ist auf SQL_TRUE festgelegt, wenn der Spaltentyp nicht signiert 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 festgelegt:
SQL_ATTR_READ_ONLY, wenn die Resultsetspalte schreibgeschützt ist.
SQL_ATTR_WRITE, wenn die Resultsetspalte Lese-/Schreibzugriff ist.
SQL_ATTR_READWRITE_UNKNOWN, wenn nicht bekannt ist, ob die Resultsetspalte aktualisierbar ist.
SQL_DESC_UPDATABLE beschreibt die Updatability der Spalte im Resultset, nicht der Spalte in der Basistabelle. Die Updatability der Spalte in der Basistabelle, auf der diese Resultsetspalte basiert, kann sich vom Wert in diesem Feld unterscheiden. Ob eine Spalte aktualisierbar ist, kann auf dem Datentyp, den Benutzerberechtigungen und der Definition des Resultsets selbst basieren. Wenn unklar ist, ob eine Spalte aktualisierbar ist, sollte SQL_ATTR_READWRITE_UNKNOWN zurückgegeben werden.
Konsistenzprüfungen
Eine Konsistenzprüfung wird vom Treiber automatisch durchgeführt, wenn eine Anwendung einen Wert für das SQL_DESC_DATA_PTR Feld der ARD, APD oder IPD übergibt. Wenn eines der Felder mit anderen Feldern inkonsistent ist, gibt SQLSetDescField SQLSTATE HY021 (Inkonsistente Deskriptorinformationen) zurück. Weitere Informationen finden Sie unter "Konsistenzprüfung" in SQLSetDescRec.
Verwandte Funktionen
Informationen über | Finden Sie unter |
---|---|
Binden einer Spalte | SQLBindCol-Funktion |
Binden eines Parameters | SQLBindParameter-Funktion |
Abrufen eines Deskriptorfelds | SQLGetDescField-Funktion |
Abrufen mehrerer Deskriptorfelder | SQLGetDescRec-Funktion |
Festlegen mehrerer Deskriptorfelder | SQLSetDescRec-Funktion |