Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Soulad
Zavedená verze: Dodržování standardů ODBC 1.0: ISO 92
Summary
SQLDescribeCol vrací deskriptor výsledků – název sloupce, typ, velikost sloupce, desetinné číslice a nulovatelnost – pro jeden sloupec ve výsledné sadě. Tyto informace jsou také dostupné v oblastech IRD.
Syntax
SQLRETURN SQLDescribeCol(
SQLHSTMT StatementHandle,
SQLUSMALLINT ColumnNumber,
SQLCHAR * ColumnName,
SQLSMALLINT BufferLength,
SQLSMALLINT * NameLengthPtr,
SQLSMALLINT * DataTypePtr,
SQLULEN * ColumnSizePtr,
SQLSMALLINT * DecimalDigitsPtr,
SQLSMALLINT * NullablePtr);
Arguments
StatementHandle
[Vstup] Popisovač příkazu
Číslo sloupce
[Vstup] Sloupec s číslem výsledků, seřazeným postupně v rostoucím pořadí sloupců, začínaje na 1. Argument ColumnNumber lze také nastavit na 0 pro popis sloupce záložek.
ColumnName
[Výstup] Ukazatel na buffer s nulovým ukončením, do kterého se vrátí název sloupce. Tato hodnota se načte z SQL_DESC_NAME pole IRD. Pokud je sloupec nepojmenovaný nebo nelze určit název sloupce, ovladač vrátí prázdný řetězec.
Pokud je ColumnName NULL, NameLengthPtr stále vrátí celkový počet znaků (kromě znaku null-termination pro data znaků), které lze vrátit v bufferu na který ukazuje ColumnName.
BufferLength
[Vstup] Délka bufferu *ColumnName , v znacích.
NameLengthPtr
[Výstup] Ukazatel na buffer, do kterého se vrací celkový počet znaků (bez nulového ukončení), které lze vrátit v *ColumnName. Pokud je počet znaků dostupných k vrácení větší nebo roven BufferLength, název sloupce v *ColumnName se zkrátí na BufferLength minus délka znaku null-termination.
DataTypePtr
[Výstup] Ukazatel na buffer, do kterého se vrátí SQL datový typ sloupce. Tato hodnota se načte z SQL_DESC_CONCISE_TYPE pole IRD. To bude jedna z hodnot v SQL datových typech, tedy v SQL datovém typu specifickém pro ovladač. Pokud nelze typ dat určit, ovladač vrátí SQL_UNKNOWN_TYPE.
V ODBC 3. x, SQL_TYPE_DATE, SQL_TYPE_TIME nebo SQL_TYPE_TIMESTAMP se vrací v *DataTypePtr pro data, čas nebo časová data; v ODBC 2. X, SQL_DATE, SQL_TIME nebo SQL_TIMESTAMP se vrací. Správce ovladačů provádí požadovaná mapování při ODBC 2. x aplikace pracuje s ODBC 3. x ovladač nebo když je ODBC 3. x aplikace pracuje s ODBC 2. X driver.
Když je ColumnNumber roven 0 (pro sloupec záložek), SQL_BINARY se vrací v *DataTypePtr pro záložky s proměnnou délkou. (SQL_INTEGER se vrátí, pokud jsou záložky použity ODBC 3. x aplikace s ODBC 2. x nebo pomocí ODBC 2. x aplikace s ODBC 3. x driver.)
Pro více informací o těchto datových typech viz SQL datové typy v příloze D: Datové typy. Informace o datových typech SQL specifických pro ovladače najdete v dokumentaci ovladače.
ColumnSizePtr
[Výstup] Ukazatel na buffer, do kterého se vrátí velikost (v znacích) sloupce na datovém zdroji. Pokud nelze určit velikost sloupce, ovladač vrátí 0. Pro více informací o velikosti sloupců viz Velikost sloupce, desetinné číslice, délka přenosového oktetu a velikost displeje v příloze D: Typy dat.
DecimalDigitsPtr
[Výstup] Ukazatel na buffer, do kterého se vrátí počet desetinných číslic sloupce na datovém zdroji. Pokud nelze určit počet desetinných číslic nebo není použitelný, ovladač vrátí 0. Pro více informací o desetinných číslicích viz Velikost sloupce, desetinné číslice, délka přenosového oktetu a velikost displeje v příloze D: Typy dat.
NullablePtr
[Výstup] Ukazatel na buffer, do kterého se vrátí hodnota, která ukazuje, zda sloupec povoluje hodnoty NULL. Tato hodnota se čte z SQL_DESC_NULLABLE pole IRD. Hodnota je jedna z následujících možností:
SQL_NO_NULLS: Sloupec neumožňuje hodnoty NULL.
SQL_NULLABLE: Sloupec umožňuje hodnoty NULL.
SQL_NULLABLE_UNKNOWN: Ovladač nemůže určit, zda sloupec povoluje hodnoty NULL.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR nebo SQL_INVALID_HANDLE.
Diagnostika
Když SQLDescribeCol vrací buď SQL_ERROR, nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLGetDiagRec voláním SQLGetDiagRec s HandleType SQL_HANDLE_STMT a HandleCommandHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLDescribeCol běžně vrací, a vysvětluje každou z nich v kontextu této funkce; notace "(DM)" předchází popisům SQLstavů vráceným Správcem ovladačů. Návratový kód přidružený ke každé hodnotě SQLSTATE je SQL_ERROR, pokud není uvedeno jinak.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Obecné upozornění | Informační zpráva specifická pro řidiče (Funkce vrátí SQL_SUCCESS_WITH_INFO.) |
| 01004 | Řetězcová data, zkrácená vpravo | Buffer *ColumnName nebyl dostatečně velký na to, aby vrátil celý název sloupce, takže název sloupce byl zkrácen. Délka nezkráceného názvu sloupce se vrací v *NameLengthPtr. (Funkce vrátí SQL_SUCCESS_WITH_INFO.) |
| 07005 | Připravené tvrzení, nikoli specifikace kurzoru | Příkaz spojený s StatementHandle nevracel sadu výsledků. Nebyly tam žádné sloupky, které by bylo možné popsat. |
| 07009 | Index neplatných deskriptorů | (DM) Hodnota určená pro argument ColumnNumber byla rovna 0 a možnost příkazu SQL_ATTR_USE_BOOKMARKS byla SQL_UB_OFF. Hodnota zadaná pro argument ColumnNumber byla větší než počet sloupců ve výsledné množině. |
| 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á nástrojem SQLGetDiagRec v vyrovnávací paměti *MessageText popisuje chybu a její příčinu. |
| HY001 | Selhání alokace paměti | Ovladač nemohl přidělit paměť potřebnou k podpoře provádění nebo dokončení funkce. |
| HY008 | Operace byla zrušena. | Asynchronní zpracování bylo povoleno pro StatementHandle. Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel nebo SQLCancelHandle pro PříkazHandle. Pak byla funkce znovu volána v StatementHandle. Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel neboSQLCancelHandlez jiného vlákna v aplikaci s více vlákny. |
| HY010 | Chyba posloupnosti funkcí | (DM) Byla volána asynchronně spuštěná funkce pro popisovač připojení, který je přidružen k StatementHandle. Tato asynchronní funkce se stále spouštěla, když byl vyvolán SQLDescribeCol . (DM) SQLExecute, SQLExecDirect nebo SQLMoreResults byl volána pro StatementHandle a vrácena SQL_PARAM_DATA_AVAILABLE. Tato funkce byla volána před načtením dat pro všechny streamované parametry. (DM) Pro PříkazHandle byla volána asynchronně spuštěná funkce (ne tato) a při zavolání této funkce se stále spouštěla. (DM) Funkce byla volána před vyvoláním SQLPrepare, SQLExecute nebo katalogové funkce na příkazové rukojeti. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations nebo SQLSetPos byly volány pro StatementHandle a vráceny SQL_NEED_DATA. Tato funkce byla volána před odesláním dat pro všechny parametry provádění dat nebo sloupce. |
| 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. |
| HY090 | Neplatná délka řetězce nebo vyrovnávací paměti | (DM) Hodnota zadaná pro argument BufferLength byla menší než 0. |
| 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. Časový limit připojení je nastavený prostřednictvím sqlSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Ovladač tuto funkci nepodporuje. | (DM) Ovladač přidružený k StatementHandle nepodporuje funkci. |
| IM017 | Dotazování je zakázané v asynchronním režimu oznámení. | Při každém použití modelu oznámení je dotazování zakázané. |
| IM018 | K dokončení předchozí asynchronní operace na tomto popisovači nebyla volána funkce SQLCompleteAsync. | Pokud předchozí volání funkce na popisovači vrátí SQL_STILL_EXECUTING a pokud je povolen režim oznámení, musí být sqlCompleteAsync volán na popisovači, aby bylo možné provést následné zpracování a dokončit operaci. |
SQLDescribeCol může vrátit jakýkoli SQLSTATE, který může vrátit SQLPrepare nebo SQLExecute při volání po SQLPrepare a před SQLExecute, v závislosti na tom, kdy datový zdroj vyhodnocuje SQL příkaz spojený s rukojetí příkazu.
Z důvodů výkonu by aplikace neměla před vykonáním příkazu volat SQLDescribeCol .
Comments
Aplikace obvykle volá SQLDescribeCol po volání do SQLPrepare a před nebo po příslušném volání na SQLExecute. Aplikace může také volat SQLDescribeCol po volání do SQLExecDirect. Další informace naleznete v tématu Metadata sady výsledků.
SQLDescribeCol získá název sloupce, typ a délku generovaný příkazem SELECT . Pokud je sloupec výraz, *ColumnName je buď prázdný řetězec, nebo název definovaný ovladačem.
Note
ODBC podporuje SQL_NULLABLE_UNKNOWN jako rozšíření, i když specifikace Open Group a SQL Access Group Call Level Interface nespecifikují možnost pro SQLDescribeCol.
Související funkce
| Informace o | Podívejte se |
|---|---|
| Vytvoření vazby vyrovnávací paměti ke sloupci v sadě výsledků | Sqlbindcol |
| Zrušení zpracování příkazů | SQLCancel |
| Vrácení informací o sloupci v množině výsledků | Sqlcolattribute |
| Načítání více řádků dat | SqlFetch |
| Vrácení počtu sloupců výsledků | SQLNumResultCols |
| Příprava příkazu pro spuštění | Sqlprepare |