SQLGetDescRec-Funktion

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

Summary
SQLGetDescRec liefert die aktuellen Einstellungen oder Werte mehrerer Felder eines Deskriptordatensatzes zurück. Die zurückgegebenen Felder beschreiben den Namen, den Datentyp und die Speicherung der Spalten- oder Parameterdaten.

Syntax

  
SQLRETURN SQLGetDescRec(  
      SQLHDESC        DescriptorHandle,  
      SQLSMALLINT     RecNumber,  
      SQLCHAR *       Name,  
      SQLSMALLINT     BufferLength,  
      SQLSMALLINT *   StringLengthPtr,  
      SQLSMALLINT *   TypePtr,  
      SQLSMALLINT *   SubTypePtr,  
      SQLLEN *        LengthPtr,  
      SQLSMALLINT *   PrecisionPtr,  
      SQLSMALLINT *   ScalePtr,  
      SQLSMALLINT *   NullablePtr);  

Argumente

DescriptorHandle
[Eingabe] Beschreibungs-Handle.

RecNumber
[Eingabe] Gibt den Beschreibungsdatensatz an, aus dem der Antrag Informationen abholt. Deskriptoreinträge werden von 1 nummeriert, wobei Datensatz Nummer 0 der Lesezeicheneintrag ist. Das RecNumber-Argument muss kleiner als oder gleich dem Wert von SQL_DESC_COUNT sein. Wenn RecNumber kleiner als oder gleich SQL_DESC_COUNT ist, die Zeile aber keine Daten für eine Spalte oder einen Parameter enthält, wird ein Aufruf von SQLGetDescRec die Standardwerte der Felder zurückgeben. (Weitere Informationen finden Sie unter "Initialisierung von Deskriptorfeldern" in SQLSetDescField.)

Name
[Ausgabe] Ein Zeiger auf einen Puffer, in dem das SQL_DESC_NAME Feld für den Deskriptor-Datensatz zurückgegeben werden kann.

Wenn Name NULL ist, gibt StringLengthPtr weiterhin die Gesamtzahl der Zeichen zurück (ohne das Null-Terminationszeichen für Zeichendaten), die im von Name gezeigten Puffer zurückgegeben werden können.

BufferLength
[Eingabe] Länge des *Name-Puffers , in Zeichen.

StringLengthPtr
[Ausgabe] Ein Zeiger auf einen Puffer, in dem die Anzahl der verfügbaren Datenzeichen im *Name-Puffer zurückgegeben werden kann, ohne das Null-Terminationszeichen. Wenn die Anzahl der Zeichen größer als oder gleich BufferLength war, werden die Daten in *Name auf BufferLength minus die Länge eines Null-Terminationszeichens abgeschnitten und vom Treiber null-terminiert.

TypePtr
[Ausgabe] Ein Zeiger auf einen Puffer, in dem der Wert des SQL_DESC_TYPE Feldes für den Deskriptor-Datensatz zurückgegeben werden kann.

SubTypePtr
[Ausgabe] Für Datensätze, deren Typ SQL_DATETIME oder SQL_INTERVAL ist, ist dies ein Zeiger auf einen Puffer, in dem der Wert des Feldes SQL_DESC_DATETIME_INTERVAL_CODE zurückgegeben werden kann.

LengthPtr
[Ausgabe] Ein Zeiger auf einen Puffer, in dem der Wert des SQL_DESC_OCTET_LENGTH Feldes für den Deskriptor-Datensatz zurückgegeben werden kann.

PrecisionPtr
[Ausgabe] Ein Zeiger auf einen Puffer, in dem der Wert des SQL_DESC_PRECISION Feldes für den Deskriptor-Datensatz zurückgegeben werden kann.

ScalePtr
[Ausgabe] Ein Zeiger auf einen Puffer, in dem der Wert des SQL_DESC_SCALE-Feldes für den Deskriptor-Datensatz zurückgegeben werden kann.

NullablePtr
[Ausgabe] Ein Zeiger auf einen Puffer, in dem der Wert des SQL_DESC_NULLABLE Feldes für den Deskriptor-Datensatz zurückgegeben werden kann.

Rücklieferungen

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_NO_DATA oder SQL_INVALID_HANDLE.

SQL_NO_DATA wird zurückgegeben, wenn RecNumber größer ist als die aktuelle Anzahl der Deskriptordatensätze.

SQL_NO_DATA wird zurückgegeben, wenn DescriptorHandle ein IRD-Handle ist und die Aussage sich im vorbereiteten oder ausgeführten Zustand befindet, aber kein offener Cursor damit verbunden war.

Diagnostics

Wenn SQLGetDescRec 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 Handle von DescriptorHandle aufgerufen wird. Die folgende Tabelle listet die SQLSTATE-Werte auf, die typischerweise von SQLGetDescRec 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.)
01004 Zeichenfolgendaten, rechts abgeschnitten Der Puffer *Name war nicht groß genug, um das gesamte Deskriptorfeld zurückzugeben. Daher wurde das Feld verkürzt. Die Länge des untrunkierten Deskriptorfeldes wird in *StringLengthPTR zurückgegeben. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
07009 Ungültiger Deskriptorindex Das FieldIdentifier-Argument war ein Datensatzfeld, das RecNumber-Argument war auf 0 gesetzt und das DescriptorHandle-Argument war ein IPD-Handle.

(DM) Das RecNumber-Argument wurde auf 0 gesetzt, das Attribut SQL_ATTR_USE_BOOKMARKS Statement wurde auf SQL_UB_OFF gesetzt, und das DescriptorHandle-Argument war ein IRD-Handle.

Das RecNumber-Argument war weniger als 0.
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.
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 den Speicher nicht zuweisen, der zur Unterstützung der Ausführung oder Abschluss der Funktion erforderlich ist.
HY007 Die zugeordnete Anweisung ist nicht vorbereitet. DescriptorHandle war mit einer IRD verknüpft, und der zugehörige Statement-Handle war nicht im vorbereiteten oder ausgeführten Zustand.
HY010 Funktionssequenzfehler (DM) DescriptorHandle war mit einem StatementHandle verknüpft, für den eine asynchron ausführende Funktion (nicht diese) aufgerufen wurde und noch ausgeführt wurde, wenn diese Funktion aufgerufen wurde.

(DM) DescriptorHandle war mit einem StatementHandle verknüpft, für den SQLExecute, SQLExecDirect, SQLBulkOperations oder SQLSetPos aufgerufen und SQL_NEED_DATA zurückgegeben wurden. 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 SQLGetDescRec aufgerufen wurde.
HY013 Speicherverwaltungsfehler Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund geringer Arbeitsspeicherbedingungen.
HY117 Die Verbindung wird aufgrund des unbekannten Transaktionsstatus angehalten. Es sind nur Trenn- und schreibgeschützte Funktionen zulässig. (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran Function.
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 DescriptorHandle verknüpfte Treiber unterstützt die Funktion nicht.

Kommentare

Eine Anwendung kann SQLGetDescRec aufrufen, um die Werte der folgenden Deskriptorfelder für eine einzelne Spalte oder einen Parameter abzurufen:

  • SQL_DESC_NAME

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (für Unterlagen, deren Typ SQL_DATETIME oder SQL_INTERVAL ist)

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PRECISION

  • SQL_DESC_SKALA

  • SQL_DESC_NULLABLE

SQLGetDescRec ruft die Werte für Kopffelder nicht ab.

Eine Anwendung kann die Rückgabe der Einstellung eines Feldes verhindern, indem sie das Argument, das dem Feld entspricht, auf einen Nullzeiger setzt.

Wenn eine Anwendung SQLGetDescRec aufruft, um den Wert eines Feldes abzurufen, das für einen bestimmten Deskriptortyp nicht definiert ist, gibt die Funktion SQL_SUCCESS zurück, aber der für das Feld zurückgegebene Wert ist undefiniert. Zum Beispiel gibt das Aufrufen von SQLGetDescRec für das SQL_DESC_NAME oder SQL_DESC_NULLABLE Feld eines APD oder ARD SQL_SUCCESS, aber einen undefinierten Wert für das Feld zurück.

Wenn eine Anwendung SQLGetDescRec aufruft, um den Wert eines Feldes abzurufen, das für einen bestimmten Deskriptortyp definiert ist, aber keinen Standardwert hat und noch nicht gesetzt wurde, gibt die Funktion SQL_SUCCESS zurück, aber der für das Feld zurückgegebene Wert ist undefiniert. Weitere Informationen finden Sie unter "Initialisierung von Deskriptorfeldern" in SQLSetDescField.

Die Werte von Feldern können auch einzeln durch einen Aufruf von SQLGetDescField abgerufen werden. Für eine Beschreibung der Felder in einem Deskriptor-Header oder Datensatz siehe SQLSetDescField. Weitere Informationen zu Deskriptoren finden Sie unter Deskriptoren.

Weitere Informationen zu Siehe
Bindung einer Spalte SQLBindCol-Funktion
Bindung eines Parameters SQLBindParameter-Funktion
Ein Deskriptorfeld erhalten SQLGetDescField-Funktion
Setzen mehrerer Deskriptorfelder SQLSetDescRec-Funktion