Udostępnij za pośrednictwem


SQLSetDescRec, funkcja

zgodności
Wersja wprowadzona: Zgodność ze standardami ODBC 3.0: ISO 92

podsumowania
Funkcja SQLSetDescRec ustawia wiele pól deskryptora mających wpływ na typ danych i bufor powiązany z danymi kolumny lub parametrów.

Składnia

  
SQLRETURN SQLSetDescRec(  
      SQLHDESC      DescriptorHandle,  
      SQLSMALLINT   RecNumber,  
      SQLSMALLINT   Type,  
      SQLSMALLINT   SubType,  
      SQLLEN        Length,  
      SQLSMALLINT   Precision,  
      SQLSMALLINT   Scale,  
      SQLPOINTER    DataPtr,  
      SQLLEN *      StringLengthPtr,  
      SQLLEN *      IndicatorPtr);  

Argumenty

DeskryptorHandle
[Dane wejściowe] Uchwyt deskryptora. Nie może to być uchwyt IRD.

RecNumber
[Dane wejściowe] Wskazuje rekord deskryptora zawierający pola do ustawienia. Rekordy deskryptora są numerowane z zakresu 0, a rekord 0 jest rekordem zakładki. Ten argument musi być równy lub większy niż 0. Jeśli RecNumber jest większa niż wartość SQL_DESC_COUNT, SQL_DESC_COUNTis została zmieniona na wartość RecNumber.

typu
[Dane wejściowe] Wartość, do której ma być ustawione pole SQL_DESC_TYPE dla rekordu deskryptora.

podtypu
[Dane wejściowe] W przypadku rekordów, których typ jest SQL_DATETIME lub SQL_INTERVAL, jest to wartość, do której należy ustawić pole SQL_DESC_DATETIME_INTERVAL_CODE.

długości
[Dane wejściowe] Wartość, do której ma być ustawione pole SQL_DESC_OCTET_LENGTH dla rekordu deskryptora.

precyzji
[Dane wejściowe] Wartość, do której ma być ustawione pole SQL_DESC_PRECISION dla rekordu deskryptora.

Skalowanie
[Dane wejściowe] Wartość, do której ma być ustawione pole SQL_DESC_SCALE dla rekordu deskryptora.

DataPtr
[Odroczone dane wejściowe lub wyjściowe] Wartość, do której ma być ustawione pole SQL_DESC_DATA_PTR dla rekordu deskryptora. DataPtr można ustawić na wskaźnik o wartości null.

Argument DataPtr można ustawić na wskaźnik o wartości null, aby ustawić pole SQL_DESC_DATA_PTR na wskaźnik o wartości null. Jeśli uchwyt w DescriptorHandle argument jest skojarzony z ARD, spowoduje to usunięcie powiązania kolumny.

stringLengthPtr
[Odroczone dane wejściowe lub wyjściowe] Wartość, do której ma być ustawione pole SQL_DESC_OCTET_LENGTH_PTR dla rekordu deskryptora. StringLengthPtr można ustawić wskaźnik o wartości null, aby ustawić pole SQL_DESC_OCTET_LENGTH_PTR na wskaźnik o wartości null.

IndicatorPtr
[Odroczone dane wejściowe lub wyjściowe] Wartość, do której ma być ustawione pole SQL_DESC_INDICATOR_PTR dla rekordu deskryptora. IndicatorPtr można ustawić wskaźnik o wartości null, aby ustawić pole SQL_DESC_INDICATOR_PTR na wskaźnik o wartości null.

Zwraca

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR lub SQL_INVALID_HANDLE.

Diagnostyka

Gdy sqlSetDescRec zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO, skojarzona wartość SQLSTATE może zostać uzyskana przez wywołanie SQLGetDiagRec przy użyciu SQL_HANDLE_DESC typu HandleType i handle DescriptorHandle. W poniższej tabeli wymieniono wartości SQLSTATE, które są często zwracane przez SQLSetDescRec i objaśniono poszczególne wartości w kontekście tej funkcji; notacja "(DM)" poprzedza opisy obiektów SQLSTATEs zwróconych przez menedżera sterowników. Kod zwracany skojarzony z każdą wartością SQLSTATE jest SQL_ERROR, chyba że określono inaczej.

SQLSTATE Błąd Opis
01000 Ostrzeżenie ogólne Komunikat informacyjny specyficzny dla sterownika. (Funkcja zwraca SQL_SUCCESS_WITH_INFO).
07009 Nieprawidłowy indeks deskryptora Argument RecNumber został ustawiony na wartość 0, a DescriptorHandle odwoływał się do dojścia IPD.

Argument RecNumber był mniejszy niż 0.

Argument RecNumber był większy niż maksymalna liczba kolumn lub parametrów, które źródło danych może obsługiwać, a argument DescriptorHandle był APD, IPD lub ARD.

Argument RecNumber był równy 0, a argument DescriptorHandle odniósł się do niejawnie przydzielonego interfejsu APD. (Ten błąd nie występuje z jawnie przydzielonym deskryptorem aplikacji, ponieważ nie wiadomo, czy deskryptor jawnie przydzielonej aplikacji jest APD, czy ARD do czasu wykonania).
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 SQLGetDiagRec w buforze *MessageText opisuje błąd i jego przyczynę.
HY001 Błąd alokacji pamięci Sterownik nie może przydzielić pamięci wymaganej do obsługi wykonywania lub ukończenia funkcji.
HY010 Błąd sekwencji funkcji (DM) DescriptorHandle została skojarzona z StatementHandle, dla której asynchronicznie wykonywana funkcja (a nie ta) została wywołana i nadal była wykonywana po wywołaniu tej funkcji.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationslub SQLSetPos został wywołany StatementHandle, z którym DescriptorHandle był skojarzony i zwracany SQL_NEED_DATA. Ta funkcja została wywołana przed wysłaniem danych dla wszystkich parametrów wykonywania danych lub kolumn.

(DM) Asynchronicznie wykonywana funkcja została wywołana dla dojścia połączenia skojarzonego z DescriptorHandle. Ta funkcja asynchroniczna była nadal wykonywana, gdy wywołano funkcję SQLSetDescRec.

(DM) SQLExecute, SQLExecDirectlub SQLMoreResults został wywołany do jednego z dojść instrukcji skojarzonych z DescriptorHandle i zwrócił SQL_PARAM_DATA_AVAILABLE. Ta funkcja została wywołana przed pobraniem danych dla wszystkich parametrów przesyłanych strumieniowo.
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.
HY016 Nie można zmodyfikować deskryptora wiersza implementacji Argument DescriptorHandle został skojarzony z IRD.
HY021 Niespójne informacje deskryptora Pole Type lub inne pole skojarzone z polem SQL_DESC_TYPE w deskryptorze było nieprawidłowe lub spójne.

Informacje deskryptora sprawdzane podczas sprawdzania spójności nie były spójne. (Zobacz sekcję "Sprawdzanie spójności", w dalszej części tej sekcji).
HY090 Nieprawidłowa długość ciągu lub buforu (DM) Sterownik był sterownikiem ODBC 2.x, deskryptor był ARD, argument ColumnNumber został ustawiony na 0, a wartość określona dla argumentu BufferLength nie była równa 4.
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 funkcja SQLEndTran.
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ą SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Sterownik nie obsługuje tej funkcji (DM) Sterownik skojarzony z DescriptorHandle nie obsługuje funkcji.

Komentarze

Aplikacja może wywołać SQLSetDescRec, aby ustawić następujące pola dla jednej kolumny lub parametru:

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (dla rekordów, których typ jest SQL_DATETIME lub SQL_INTERVAL)

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PRECISION

  • SQL_DESC_SCALE

  • SQL_DESC_DATA_PTR

  • SQL_DESC_OCTET_LENGTH_PTR

  • SQL_DESC_INDICATOR_PTR

Nuta

Jeśli wywołanie metody SQLSetDescRec zakończy się niepowodzeniem, zawartość rekordu deskryptora zidentyfikowanego przez argument RecNumber jest niezdefiniowana.

Podczas tworzenia powiązania kolumny lub parametru SQLSetDescRec umożliwia zmianę wielu pól wpływających na powiązanie bez wywoływania SQLBindCol lub SQLBindParameter lub wykonywania wielu wywołań SQLSetDescField. SQLSetDescRec może ustawiać pola na deskryptorze, który nie jest obecnie skojarzony z instrukcją. Należy pamiętać, że SQLBindParameter ustawia więcej pól niż SQLSetDescRec, może ustawić pola zarówno na APD, jak i IPD w jednym wywołaniu i nie wymaga uchwytu deskryptora.

Nuta

Atrybut instrukcji SQL_ATTR_USE_BOOKMARKS należy zawsze ustawiać przed wywołaniem SQLSetDescRec z RecNum ber argumentem 0, aby ustawić pola zakładki. Chociaż nie jest to obowiązkowe, zdecydowanie zaleca się.

Sprawdzanie spójności

Sprawdzanie spójności jest wykonywane przez sterownik automatycznie za każdym razem, gdy aplikacja ustawia pole SQL_DESC_DATA_PTR APD, ARD lub IPD. Jeśli którekolwiek z pól jest niespójne z innymi polami, SQLSetDescRec zwróci sqlSTATE HY021 (niespójne informacje deskryptora).

Za każdym razem, gdy aplikacja ustawia pole SQL_DESC_DATA_PTR apD, ARD lub IPD, sterownik sprawdza, czy wartość pola SQL_DESC_TYPE i wartości dotyczące tego pola SQL_DESC_TYPE są prawidłowe i spójne. Ta kontrola jest zawsze wykonywana, gdy jest wywoływana sqlBindParameter lub SQLBindCol lub gdy SQLSetDescRec jest wywoływana dla usługi APD, ARD lub IPD. Ten sprawdzanie spójności obejmuje następujące kontrole pól deskryptora:

  • Pole SQL_DESC_TYPE musi być jednym z prawidłowych typów ODBC C lub SQL lub typu SQL specyficznego dla sterownika. Pole SQL_DESC_CONCISE_TYPE musi być jednym z prawidłowych typów C lub SQL ODBC albo typu C lub SQL specyficznego dla sterownika, w tym zwięzłe typy daty/godziny i interwału.

  • Jeśli pole rekordu SQL_DESC_TYPE jest SQL_DATETIME lub SQL_INTERVAL, pole SQL_DESC_DATETIME_INTERVAL_CODE musi być jednym z prawidłowych kodów daty/godziny lub interwału. (Zobacz opis pola SQL_DESC_DATETIME_INTERVAL_CODE w SQLSetDescField).)

  • Jeśli pole SQL_DESC_TYPE wskazuje typ liczbowy, pola SQL_DESC_PRECISION i SQL_DESC_SCALE są weryfikowane jako prawidłowe.

  • Jeśli pole SQL_DESC_CONCISE_TYPE jest typem danych znacznika czasu lub sygnatury czasowej, typ interwału ze składnikiem sekund lub jednym z typów danych interwału ze składnikiem czasu, pole SQL_DESC_PRECISION jest weryfikowane jako prawidłowa precyzja sekund.

  • Jeśli SQL_DESC_CONCISE_TYPE jest typem danych interwału, pole SQL_DESC_DATETIME_INTERVAL_PRECISION jest weryfikowane jako prawidłowa wartość precyzji wiodącej interwału.

Pole SQL_DESC_DATA_PTR ipD nie jest zwykle ustawione; jednak aplikacja może to zrobić, aby wymusić sprawdzanie spójności pól IPD. Nie można przeprowadzić sprawdzania spójności na IRD. Wartość ustawiona na wartość pola SQL_DESC_DATA_PTR adresu IPD nie jest rzeczywiście przechowywana i nie może zostać pobrana przez wywołanie polecenia SQLGetDescField lub SQLGetDescRec; ustawienie jest wykonywane tylko w celu wymuszenia sprawdzania spójności.

Aby uzyskać informacje o Widzieć
Wiązanie kolumny funkcji SQLBindCol
Wiązanie parametru funkcji SQLBindParameter
Pobieranie pojedynczego pola deskryptora funkcji SQLGetDescField
Pobieranie wielu pól deskryptora funkcji SQLGetDescRec
Ustawianie pól pojedynczego deskryptora funkcji SQLSetDescField

Zobacz też

dokumentacja interfejsu API ODBC
plików nagłówków ODBC