Sdílet prostřednictvím


FUNKCE SQLSetDescRec

shoda
Zavedená verze: Dodržování standardů ODBC 3.0: ISO 92

souhrnu
Funkce SQLSetDescRec nastaví více polí popisovače, která ovlivňují datový typ a vyrovnávací paměť vázanou na data sloupce nebo parametru.

Syntax

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

Argumenty

popisovačHandle
[Vstup] Popisovač popisovače Nesmí to být popisovač IRD.

RecNumber
[Vstup] Označuje záznam popisovače, který obsahuje pole, která se mají nastavit. Záznamy popisovače jsou číslované od 0, přičemž záznamem záložky je číslo 0. Tento argument musí být roven nebo větší než 0. Pokud RecNumber je větší než hodnota SQL_DESC_COUNT, SQL_DESC_COUNTis se změní na hodnotu RecNumber.

typ
[Vstup] Hodnota, na kterou chcete nastavit pole SQL_DESC_TYPE záznamu popisovače.

podtypu
[Vstup] U záznamů, jejichž typ je SQL_DATETIME nebo SQL_INTERVAL, je to hodnota, na kterou chcete nastavit pole SQL_DESC_DATETIME_INTERVAL_CODE.

délka
[Vstup] Hodnota, na kterou chcete nastavit pole SQL_DESC_OCTET_LENGTH pro záznam popisovače.

Přesnost
[Vstup] Hodnota, na kterou chcete nastavit pole SQL_DESC_PRECISION záznamu popisovače.

škálování
[Vstup] Hodnota, na kterou chcete nastavit pole SQL_DESC_SCALE záznamu popisovače.

DataPtr
[Odložený vstup nebo výstup] Hodnota, na kterou chcete nastavit pole SQL_DESC_DATA_PTR pro záznam popisovače. dataPtr lze nastavit na ukazatel null.

Argument DataPtr lze nastavit na nulový ukazatel, který nastaví pole SQL_DESC_DATA_PTR na ukazatel null. Pokud je popisovač v PopisovačHandle argumentu přidružen k ARD, zruší tato vazba sloupec.

StringLengthPtr
[Odložený vstup nebo výstup] Hodnota, na kterou chcete nastavit pole SQL_DESC_OCTET_LENGTH_PTR pro záznam popisovače. StringLengthPtr lze nastavit na ukazatel null, který nastaví pole SQL_DESC_OCTET_LENGTH_PTR na ukazatel null.

IndicatorPtr
[Odložený vstup nebo výstup] Hodnota, na kterou chcete nastavit pole SQL_DESC_INDICATOR_PTR pro záznam popisovače. IndicatorPtr lze nastavit na ukazatel null, který nastaví pole SQL_DESC_INDICATOR_PTR na ukazatel null.

Návraty

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR nebo SQL_INVALID_HANDLE.

Diagnostika

Když SQLSetDescRec vrátí SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze přidruženou hodnotu SQLSTATE získat voláním SQLGetDiagRec s HandleType SQL_HANDLE_DESC a PopisovačPopisovačHandle. Následující tabulka uvádí hodnoty SQLSTATE běžně vrácené SQLSetDescRec a vysvětluje každý z nich v kontextu této funkce; notace "(DM)" předchází popisy funkcí SQLSTATEs vrácených správcem ovladačů. Návratový kód přidružený ke každé hodnotě SQLSTATE je SQL_ERROR, pokud není uvedeno jinak.

SQLSTATE Chyba Popis
01000 Obecné upozornění Informační zpráva specifická pro řidiče (Funkce vrátí SQL_SUCCESS_WITH_INFO.)
07009 Neplatný index popisovače Argument RecNumber byl nastaven na hodnotu 0 a PopisovačHandle odkazoval na popisovač IPD.

Argument RecNumber byl menší než 0.

Argument RecNumber byl větší než maximální počet sloupců nebo parametrů, které může zdroj dat podporovat, a argument PopisovačHandle byl argument APD, IPD nebo ARD.

Argument RecNumber byl roven 0 a argument PopisovačHandle odkazovaný na implicitně přidělený apD. (K této chybě nedochází u explicitně přiděleného popisovače aplikace, protože není známo, zda explicitně přidělený popisovač aplikace je APD nebo ARD, dokud nespustí čas.)
08S01 Selhání komunikačního propojení Komunikační propojení mezi ovladačem a zdrojem dat, ke kterému byl ovladač připojen, selhalo před dokončením zpracování funkce.
HY000 Obecná chyba Došlo k chybě, pro kterou nebyla definována žádná specifická funkce SQLSTATE a pro kterou nebyla definována žádná implementace sqlSTATE. Chybová zpráva vrácená sqlGetDiagRec v *MessageText vyrovnávací paměti popisuje chybu a její příčinu.
HY001 Chyba přidělení paměti Ovladač nemohl přidělit paměť potřebnou k podpoře provádění nebo dokončení funkce.
HY010 Chyba posloupnosti funkcí (DM) DeskriptorHandle byl přidružen k StatementHandle, pro který byla volána asynchronně spuštěná funkce (ne tato) a stále se spouštěla, když byla tato funkce volána.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperationsnebo SQLSetPos byl volána pro StatementHandle, se kterým byl PopisovačNá h přidružen a vrácen SQL_NEED_DATA. Tato funkce byla volána před odesláním dat pro všechny parametry provádění dat nebo sloupce.

(DM) Byla volána asynchronně spuštěná funkce pro popisovač připojení, který je přidružen k PopisovačHandle. Tato asynchronní funkce se stále spouštěla, když byla volána funkce SQLSetDescRec.

(DM) sqlExecute, SQLExecDirectnebo SQLMoreResults byl volána pro jeden z popisovačů příkazů přidružených k DescriptorHandle a vrácený SQL_PARAM_DATA_AVAILABLE. Tato funkce byla volána před načtením dat pro všechny streamované parametry.
HY013 Chyba správy paměti Volání funkce nelze zpracovat, protože základní objekty paměti nelze získat přístup, pravděpodobně kvůli nedostatku paměti.
HY016 Nelze upravit popisovač řádku implementace. Argument PopisovačHandle byl přidružen k IRD.
HY021 Nekonzistentní informace popisovače Pole Typ nebo jakékoli jiné pole přidružené k poli SQL_DESC_TYPE v popisovači nebylo platné nebo konzistentní.

Informace popisovače kontrolované během kontroly konzistence nebyly konzistentní. (Viz "Kontroly konzistence", dále v této části.)
HY090 Neplatná délka řetězce nebo vyrovnávací paměti (DM) Ovladač byl ovladač ODBC 2.x, popisovač byl ARD, ColumnNumber argument byl nastaven na hodnotu 0 a hodnota zadaná pro argument BufferLength nebyla rovna 4.
HY117 Připojení je pozastaveno kvůli neznámému stavu transakce. Jsou povoleny pouze funkce pro odpojení a jen pro čtení. (DM) Další informace o pozastaveném stavu naleznete v tématu FUNKCE SQLEndTran.
HYT01 Vypršel časový limit připojení Platnost časového limitu připojení vypršela, než zdroj dat odpověděl na žádost. Doba časového limitu připojení je nastavena prostřednictvím SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Ovladač tuto funkci nepodporuje. (DM) Ovladač přidružený k DeskriptorHandle nepodporuje funkci.

Komentáře

Aplikace může volat SQLSetDescRec nastavit následující pole pro jeden sloupec nebo parametr:

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (pro záznamy, jejichž typ je SQL_DATETIME nebo 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

Poznámka

Pokud volání SQLSetDescRec selže, obsah záznamu popisovače identifikovaný argumentem RecNumber není definován.

Při vytváření vazby sloupce nebo parametru SQLSetDescRec umožňuje změnit více polí ovlivňujících vazbu bez volání SQLBindCol nebo SQLBindParameter nebo provádění více volání SQLSetDescField. SQLSetDescRec může nastavit pole popisovače, který není aktuálně přidružen k příkazu. Všimněte si, že SQLBindParameter nastaví více polí než SQLSetDescRec, může nastavit pole v APD i IPD v jednom volání a nevyžaduje popisovač popisovače.

Poznámka

Atribut příkazu SQL_ATTR_USE_BOOKMARKS by měl být vždy nastaven před voláním SQLSetDescRec s argumentem RecNumber argument 0 k nastavení polí záložek. I když to není povinné, důrazně se doporučuje.

Kontroly konzistence

Ovladač provádí kontrolu konzistence automaticky pokaždé, když aplikace nastaví SQL_DESC_DATA_PTR pole APD, ARD nebo IPD. Pokud některá z polí není konzistentní s jinými poli, SQLSetDescRec vrátí hodnotu SQLSTATE HY021 (nekonzistentní informace popisovače).

Když aplikace nastaví SQL_DESC_DATA_PTR pole APD, ARD nebo IPD, ovladač zkontroluje, jestli je hodnota pole SQL_DESC_TYPE a hodnoty platné a konzistentní pro dané pole SQL_DESC_TYPE. Tato kontrola se provádí vždy při volání SQLBindParameter nebo SQLBindCol nebo při volání SQLSetDescRec apD, ARD nebo IPD. Tato kontrola konzistence zahrnuje následující kontroly polí popisovače:

  • Pole SQL_DESC_TYPE musí být jedním z platných typů ODBC C nebo SQL nebo typu SQL specifického pro ovladač. Pole SQL_DESC_CONCISE_TYPE musí být jedním z platných typů ODBC C nebo SQL nebo typu jazyka C nebo SQL specifického pro ovladač, včetně stručných typů data a času a intervalu.

  • Pokud je pole záznamu SQL_DESC_TYPE SQL_DATETIME nebo SQL_INTERVAL, musí být pole SQL_DESC_DATETIME_INTERVAL_CODE jedním z platných kódů data a času nebo intervalu. (Viz popis pole SQL_DESC_DATETIME_INTERVAL_CODE v SQLSetDescField.)

  • Pokud pole SQL_DESC_TYPE označuje číselný typ, ověří se platnost polí SQL_DESC_PRECISION a SQL_DESC_SCALE.

  • Pokud je pole SQL_DESC_CONCISE_TYPE datový typ času nebo časového razítka, typ intervalu s komponentou sekund nebo jeden z datových typů intervalů s časovou komponentou, je pole SQL_DESC_PRECISION ověřeno jako platná přesnost sekund.

  • Pokud je SQL_DESC_CONCISE_TYPE datový typ intervalu, je pole SQL_DESC_DATETIME_INTERVAL_PRECISION ověřeno jako platná hodnota přesnosti intervalu.

Pole SQL_DESC_DATA_PTR IPD není obvykle nastaveno; Aplikace to ale může udělat, aby vynutila kontrolu konzistence polí IPD. U interního interního ověřování (IRD) nelze provést kontrolu konzistence. Hodnota, na kterou je pole SQL_DESC_DATA_PTR IPD nastaveno, není ve skutečnosti uložena a nelze ji načíst voláním SQLGetDescField nebo SQLGetDescRec; Nastavení je provedeno pouze k vynucení kontroly konzistence.

Informace o Vidět
Vytvoření vazby sloupce funkce SQLBindCol
Vytvoření vazby parametru funkce SQLBindParameter
Získání jednoho pole popisovače funkce SQLGetDescField
Získání více polí popisovače funkce SQLGetDescRec
Nastavení polí s jedním popisovačem funkce SQLSetDescField

Viz také

Referenční rozhraní ODBC API
soubory hlaviček ODBC