SQLGetDescRec, funkcja

Zgodność
Wprowadzona wersja: Zgodność z normami ODBC 3.0: ISO 92

Podsumowanie
SQLGetDescRec zwraca aktualne ustawienia lub wartości wielu pól rekordu deskryptora. Pola zwracane opisują nazwę, typ danych oraz przechowywanie danych kolumnowych lub parametrów.

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);  

Arguments

DeskryptorHandle
[Input] Uchwyt deskryptoru.

NumerRekordów
[Input] Wskazuje rekord deskryptorowy, z którego wniosek poszukuje informacji. Rekordy deskryptoryczne są numerowane od 1, przy czym numer 0 to zapis zakładek. Argument RecNumber musi być mniejszy lub równy wartości SQL_DESC_COUNT. Jeśli RecNumber jest mniejszy lub równy SQL_DESC_COUNT ale wiersz nie zawiera danych dla kolumny lub parametru, wywołanie SQLGetDescRec zwróci domyślne wartości pól. (Więcej informacji można znaleźć w sekcji "Initialization of Descriptor Fields" w SQLSetDescField.)

Nazwa
[Wyjście] Wskaźnik do bufora, w którym zwraca pole SQL_DESC_NAME dla rekordu deskryptoru.

Jeśli Name jest NULL, StringLengthPtr nadal zwraca łączną liczbę znaków (z wyłączeniem znaku zakończenia zerowego dla danych znakowych) dostępnych do zwrócenia w buforze wskazanym przez Name.

BufferLength
[Input] Długość *Bufora nazwy , w znakach.

StringLengthPtr
[Wyjście] Wskaźnik do bufora, w którym zwraca się liczbę znaków danych dostępnych do zwrócenia w buforze *Nazwy , z wyłączeniem znaku zakończenia zerowego. Jeśli liczba znaków była większa lub równa BufferLength, dane w *Name są skracane do BufferLength minus długość znaku zakończenia zerowego i są przez sterownik zakończane przez null-termin.

TypePtr
[Wyjście] Wskaźnik do bufora, w którym zwraca wartość pola SQL_DESC_TYPE dla rekordu deskryptoru.

SubTypePtr
[Wyjście] Dla rekordów, których typ to SQL_DATETIME lub SQL_INTERVAL, jest to wskaźnik do bufora, w którym zwraca się wartość pola SQL_DESC_DATETIME_INTERVAL_CODE.

LengthPtr
[Wyjście] Wskaźnik do bufora, w którym zwraca wartość pola SQL_DESC_OCTET_LENGTH dla rekordu deskryptoru.

PrecisionPtr
[Wyjście] Wskaźnik do bufora, w którym zwraca wartość pola SQL_DESC_PRECISION dla rekordu deskryptoru.

ScalePtr
[Wyjście] Wskaźnik do bufora, w którym zwraca wartość pola SQL_DESC_SCALE dla rekordu deskryptoru.

NullablePtr
[Wyjście] Wskaźnik do bufora, w którym zwraca wartość pola SQL_DESC_NULLABLE dla rekordu deskryptoru.

Zwroty

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_NO_DATA lub SQL_INVALID_HANDLE.

SQL_NO_DATA zwracany, jeśli RecNumber jest większy niż aktualna liczba rekordów deskryptorów.

SQL_NO_DATA zwracany, jeśli DescriptorHandle jest uchwytem IRD, a instrukcja znajduje się w stanie przygotowanym lub wykonanym, ale nie było z nią powiązanego otwartego kursora.

Diagnostyka

Gdy SQLGetDescRec zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, można uzyskać powiązaną wartość SQLSTATE, wywołując SQLGetDiagRec z HandleType SQL_HANDLE_DESC oraz Handle z DescriptorHandle. Poniższa tabela przedstawia wartości SQLSTATE typowo zwracane przez SQLGetDescRec i wyjaśnia każdą z nich w kontekście tej funkcji; notacja "(DM)" poprzedza opisy stanów SQL zwracanych przez Menedżera Sterowników. Kod zwracany skojarzony z każdą wartością SQLSTATE jest SQL_ERROR, chyba że określono inaczej.

SQLSTATE Error Description
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
01004 Dane ciągów, prawe obcięte Bufor *Nazwa nie był wystarczająco duży, by zwrócić całe pole deskryptoru. W związku z tym pole zostało obcięte. Długość nieobciętego pola deskryptorowego zwracana jest w *StringLengthPtr. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
07009 Nieprawidłowy indeks deskryptorów Argument FieldIdentifier był polem rekordu, argument RecNumber ustawiono na 0, a argument DescriptorHandle to uchwyt IPD.

(DM) Argument RecNumber był ustawiony na 0, a atrybut SQL_ATTR_USE_BOOKMARKS na SQL_UB_OFF, a argument DescriptorHandle był handlem IRD.

Argument RecNumber był mniejszy niż 0.
08S01 Błąd połączenia komunikacyjnego Połączenie komunikacyjne między sterownikiem a źródłem danych, z którym sterownik został połączony, nie powiodło się przed zakończeniem przetwarzania funkcji.
HY000 Błąd ogólny Wystąpił błąd, dla którego nie było określonego stanu SQLSTATE i dla którego nie zdefiniowano parametru SQLSTATE specyficznego dla implementacji. Komunikat o błędzie zwrócony przez element SQLGetDiagRec w buforze *MessageText opisuje błąd i jego przyczynę.
HY001 Błąd alokacji pamięci Sterownik nie był w stanie przydzielić pamięci potrzebnej do wykonania lub zakończenia funkcji.
HY007 Powiązane oświadczenie nie jest przygotowane DescriptorHandle był powiązany z IRD, a powiązany uchwyt instrukcji nie znajdował się w stanie przygotowanym ani wykonanym.
HY010 Błąd sekwencji funkcji (DM) DescriptorHandle był powiązany z CommandHandle , dla którego wywoływano asynchronicznie wykonywaną funkcję (nie tę) i która nadal działała, gdy ta funkcja została wywołana.

(DM) DescriptorHandle był powiązany z StatementHandle , dla którego wywoływano SQLExecute, SQLExecDirect, SQLBulkOperations lub SQLSetPos i zwracało SQL_NEED_DATA. Ta funkcja została wywołana przed wysłaniem danych dla wszystkich parametrów wykonywania danych lub kolumn.

(DM) Funkcja wykonywana asynchronicznie została wywołana dla uchwytu połączenia powiązanego z DescriptorHandle. Ta asynchroniczna funkcja działała nadal, gdy wywoływano SQLGetDescRec .
HY013 Błąd zarządzania pamięcią Nie można przetworzyć wywołania funkcji, ponieważ nie można uzyskać dostępu do bazowych obiektów pamięci, prawdopodobnie z powodu niskich warunków pamięci.
HY117 Połączenie jest zawieszone z powodu nieznanego stanu transakcji. Dozwolone są tylko funkcje rozłączania i tylko do odczytu. (DM) Aby uzyskać więcej informacji na temat stanu wstrzymania, zobacz SQLEndTran, funkcja.
HYT01 Upłynął limit czasu połączenia Okres przekroczenia limitu czasu połączenia wygasł, zanim źródło danych odpowiedziało na żądanie. Limit czasu połączenia jest ustawiany za pomocą parametru SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Sterownik nie obsługuje tej funkcji (DM) Sterownik powiązany z DescriptorHandle nie obsługuje tej funkcji.

Comments

Aplikacja może wywołać SQLGetDescRec , aby pobrać wartości następujących pól deskryptorów dla pojedynczej kolumny lub parametru:

  • SQL_DESC_NAME

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (dla zapisów, których typ to SQL_DATETIME lub SQL_INTERVAL)

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PRECISION

  • SQL_DESC_SCALE

  • SQL_DESC_NULLABLE

SQLGetDescRec nie pobiera wartości pól nagłówków.

Aplikacja może zapobiec zwrotowi ustawienia pola, ustawiając argument odpowiadający polu na wskaźnik zerowy.

Gdy aplikacja wywołuje SQLGetDescRec , aby pobrać wartość pola niezdefiniowanego dla danego typu deskryptora, funkcja zwraca SQL_SUCCESS ale wartość zwrócona dla pola jest niezdefiniowana. Na przykład, wywołanie SQLGetDescRec dla pola SQL_DESC_NAME lub SQL_DESC_NULLABLE w APD lub ARD zwróci SQL_SUCCESS, ale niezdefiniowaną wartość dla tego pola.

Gdy aplikacja wywołuje SQLGetDescRec , aby pobrać wartość pola zdefiniowanego dla określonego typu deskryptora, które nie ma wartości domyślnej i nie zostało jeszcze ustawione, funkcja zwraca SQL_SUCCESS, ale wartość zwrócona dla pola jest niezdefiniowana. Więcej informacji można znaleźć w sekcji "Initialization of Descriptor Fields" w SQLSetDescField.

Wartości pól można również pobrać indywidualnie przez wywołanie do SQLGetDescField. Aby uzyskać opis pól w nagłówku lub rekordzie deskryptora, zobacz SQLSetDescField. Aby uzyskać więcej informacji na temat deskryptorów, zobacz Deskryptory.

Aby uzyskać informacje o Zobacz
Owiązywanie kolumny SQLBindCol, funkcja
Wiązanie parametru Funkcja SQLBindParameter
Uzyskanie pola deskryptorowego Funkcja SQLGetDescField
Ustawianie wielu pól deskryptorowych Funkcja SQLSetDescRec