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
SQLGetFunctions vrací informace o tom, zda ovladač podporuje konkrétní ODBC funkci. Tato funkce je implementována ve Správci ovladačů; Může být také implementován v ovladačích. Pokud ovladač implementuje SQLGetFunctions, správce ovladačů volá tuto funkci v ovladači. Jinak funkci vykoná sama.
Syntax
SQLRETURN SQLGetFunctions(
SQLHDBC ConnectionHandle,
SQLUSMALLINT FunctionId,
SQLUSMALLINT * SupportedPtr);
Arguments
ConnectionHandle
[Vstup] Popisovač připojení.
FunctionId
[Vstup] #define hodnota, která identifikuje funkci ODBC, o kterou se zajímá; SQL_API_ODBC3_ALL_FUNCTIONS orSQL_API_ALL_FUNCTIONS.
SQL_API_ODBC3_ALL_FUNCTIONS používá aplikace ODBC 3*.x* k určení podpory funkcí ODBC 3*.x* a starších.
SQL_API_ALL_FUNCTIONS používá aplikace ODBC 2*.x* k určení podpory funkcí ODBC 2*.x* a starších.
Pro seznam #define hodnot, které identifikují funkce ODBC, viz tabulky v sekci "Komentáře".
SupportedPtr
[Výstup] Pokud FunctionId identifikuje jednu funkci ODBC, SupportedPtr ukazuje na jednu hodnotu SQLUSMALLINT, která je SQL_TRUE, pokud je daná funkce podporována ovladačem, a SQL_FALSE, pokud není podporována.
Pokud je FunctionId SQL_API_ODBC3_ALL_FUNCTIONS, SupportedPtr ukazuje na pole SQLSMALLINT s počtem prvků roven SQL_API_ODBC3_ALL_FUNCTIONS_SIZE. Toto pole je správcem ovladačů považováno za 4 000bitovou bitovou mapu, kterou lze použít k určení, zda je podporována funkce ODBC 3*.x* nebo starší. Makro SQL_FUNC_EXISTS se volá k určení podpory funkcí. (Viz "Komentáře.") Aplikace ODBC 3*.x* může volat SQLGetFunctions s SQL_API_ODBC3_ALL_FUNCTIONS proti ovladači ODBC 3*.x* nebo ODBC 2*.x*.
Pokud je FunctionId SQL_API_ALL_FUNCTIONS, SupportedPtr ukazuje na pole SQLUSMALLINT se 100 prvky. Pole je indexováno #define hodnotami, které FunctionId používá k identifikaci každé ODBC funkce; některé prvky pole nejsou využity a jsou vyhrazeny pro budoucí použití. Prvek je SQL_TRUE, pokud identifikuje funkci ODBC 2*.x* nebo starší, kterou ovladač podporuje. Je SQL_FALSE, pokud identifikuje funkci ODBC, kterou ovladač nepodporuje, nebo neidentifikuje funkci ODBC.
Pole vrácená v *SupportedPtr používají indexování založené na nule.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR nebo SQL_INVALID_HANDLE.
Diagnostika
Když SQLGetFunctions vrátí SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLGetDiagRec vyvolání SQLGetDiagRec pomocí HandleType SQL_HANDLE_DBC a HandleConnectionHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLGetFunctions 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.) |
| 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 | 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) SQLGetFunctions byl volán před SQLConnect, SQLBrowseConnect nebo SQLDriverConnect. (DM) SQLBrowseConnect byl vyvolán pro ConnectionHandle a vrátil SQL_NEED_DATA. Tato funkce byla vyvolána před tím, než SQLBrowseConnect vrátil SQL_SUCCESS_WITH_INFO nebo SQL_SUCCESS. (DM) SQLExecute, SQLExecDirect nebo SQLMoreResults byl volán pro ConnectionHandle a vracel 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. |
| HY095 | Typ funkce mimo rozsah | (DM) Byla zadána neplatná hodnota FunctionId . |
| 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. |
Comments
SQLGetFunctions vždy vrací, že podporují SQLGetFunctions, SQLDataSources a SQLDrivers . Dělá to proto, že tyto funkce jsou implementovány ve Správci ovladačů. Driver Manager namapuje ANSI funkci na odpovídající Unicode funkci, pokud Unicode funkce existuje, a namapuje Unicode funkci na odpovídající ANSI funkci, pokud ANSI funkce existuje. Pro informace o tom, jak aplikace využívají SQLGetFunctions, viz Úrovně souladu rozhraní.
Následuje seznam platných hodnot FunctionId pro funkce, které splňují úroveň souladu s normami ISO 92:
| FunctionId Value | FunctionId Value |
|---|---|
| SQL_API_SQLALLOCHANDLE | SQL_API_SQLGETDESCFIELD |
| SQL_API_SQLBINDCOL | SQL_API_SQLGETDESCREC |
| SQL_API_SQLCANCEL | SQL_API_SQLGETDIAGFIELD |
| SQL_API_SQLCLOSECURSOR | SQL_API_SQLGETDIAGREC |
| SQL_API_SQLCOLATTRIBUTE | SQL_API_SQLGETENVATTR |
| SQL_API_SQLCONNECT | SQL_API_SQLGETFUNCTIONS |
| SQL_API_SQLCOPYDESC | SQL_API_SQLGETINFO |
| SQL_API_SQLDATASOURCES | SQL_API_SQLGETSTMTATTR |
| SQL_API_SQLDESCRIBECOL | SQL_API_SQLGETTYPEINFO |
| SQL_API_SQLDISCONNECT | SQL_API_SQLNUMRESULTCOLS |
| SQL_API_SQLDRIVERS | SQL_API_SQLPARAMDATA |
| SQL_API_SQLENDTRAN | SQL_API_SQLPREPARE |
| SQL_API_SQLEXECDIRECT | SQL_API_SQLPUTDATA |
| SQL_API_SQLEXECUTE | SQL_API_SQLROWCOUNT |
| SQL_API_SQLFETCH | SQL_API_SQLSETCONNECTATTR |
| SQL_API_SQLFETCHSCROLL | SQL_API_SQLSETCURSORNAME |
| SQL_API_SQLFREEHANDLE | SQL_API_SQLSETDESCFIELD |
| SQL_API_SQLFREESTMT | SQL_API_SQLSETDESCREC |
| SQL_API_SQLGETCONNECTATTR | SQL_API_SQLSETENVATTR |
| SQL_API_SQLGETCURSORNAME | SQL_API_SQLSETSTMTATTR |
| SQL_API_SQLGETDATA |
Následuje seznam platných hodnot pro FunctionId pro funkce odpovídající úrovni souladu se standardy Open Group:
| FunctionId Value | FunctionId Value |
|---|---|
| SQL_API_SQLCOLUMNS | SQL_API_SQLSTATISTICS |
| SQL_API_SQLSPECIALCOLUMNS | SQL_API_SQLTABLES |
Následuje seznam platných hodnot FunctionId pro funkce odpovídající úrovni souladu se standardy ODBC.
| FunctionId Value | FunctionId Value |
|---|---|
| SQL_API_SQLBINDPARAMETER | SQL_API_SQLNATIVESQL |
| SQL_API_SQLBROWSECONNECT | SQL_API_SQLNUMPARAMS |
| SQL_API_SQLBULKOPERATIONS[1] | SQL_API_SQLPRIMARYKEYS |
| SQL_API_SQLCOLUMNPRIVILEGES | SQL_API_SQLPROCEDURECOLUMNS |
| SQL_API_SQLDESCRIBEPARAM | SQL_API_SQLPROCEDURES |
| SQL_API_SQLDRIVERCONNECT | SQL_API_SQLSETPOS |
| SQL_API_SQLFOREIGNKEYS | SQL_API_SQLTABLEPRIVILEGES |
| SQL_API_SQLMORERESULTS |
[1] Při práci s ovladačem ODBC 2*.x* bude SQLBulkOperations vrácen jako podporovaný pouze tehdy, pokud platí obě následující podmínky: ovladač ODBC 2*.x* podporuje SQLSetPos a typ informace SQL_POS_OPERATIONS vrací SQL_POS_ADD bit nastavený.
Následuje seznam platných hodnot pro FunctionId pro funkce zavedené v ODBC 3.8 nebo novějším:
| FunctionId Value |
|---|
| SQL_API_SQLCANCELHANDLE [2] |
[2] SQLCancelHandle bude vrácen jako podporovaný pouze tehdy, pokud ovladač podporuje jak SQLCancel, tak SQLCancelHandle. Pokud je podporován SQLCancel, ale SQLCancelHandle ne, aplikace může stále volat SQLCancelHandle na příkazovém handle, protože bude mapován na SQLCancel.
SQL_FUNC_EXISTS Macro
Makro SQL_FUNC_EXISTS(SupportedPtr, FunctionID) se používá k určení podpory funkcí ODBC 3*.x* nebo starších poté, co byl SQLGetFunctions zavolán argumentem FunctionId o SQL_API_ODBC3_ALL_FUNCTIONS. Volání aplikace SQL_FUNC_EXISTS s argumentem SupportedPtr nastaveným na SupportedPtr předávaným v SQLGetFunctions a s argumentem FunctionID nastaveným na #define pro danou funkci. SQL_FUNC_EXISTS vrací SQL_TRUE, pokud je funkce podporována, a SQL_FALSE jinak.
Note
Při práci s ovladačem ODBC 2*.x* správce ovladačů ODBC 3*.x* vrátí SQL_TRUE pro SQLAllocHandle a SQLFreeHandle , protože SQLAllocHandle je mapován na SQLAllocEnv, SQLAllocConnect nebo SQLAllocStmt, a protože SQLFreeHandle je mapován na SQLFreeEnv, SQLFreeConnect nebo SQLFreeStmt. SQLAllocHandle nebo SQLFreeHandle s argumentem HandleType SQL_HANDLE_DESC však není podporován, i když je SQL_TRUE vráceno pro funkce, protože v tomto případě neexistuje funkce ODBC 2*.x*, na kterou by se dalo mapovat.
Příklad kódu
Následující tři příklady ukazují, jak aplikace využívá SQLGetFunctions k určení, zda ovladač podporuje SQLTables, SQLColumns a SQLStatistics. Pokud ovladač tyto funkce nepodporuje, aplikace se od ovladače odpojí. První příklad volá SQLGetFunctions jednou pro každou funkci.
SQLUSMALLINT TablesExists, ColumnsExists, StatisticsExists;
RETCODE retcodeTables, retcodeColumns, retcodeStatistics
retcodeTables = SQLGetFunctions(hdbc, SQL_API_SQLTABLES, &TablesExists);
retcodeColumns = SQLGetFunctions(hdbc, SQL_API_SQLCOLUMNS, &ColumnsExists);
retcodeStatistics = SQLGetFunctions(hdbc, SQL_API_SQLSTATISTICS, &StatisticsExists);
// SQLGetFunctions is completed successfully and SQLTables, SQLColumns, and SQLStatistics are supported by the driver.
if (retcodeTables == SQL_SUCCESS && TablesExists == SQL_TRUE &&
retcodeColumns == SQL_SUCCESS && ColumnsExists == SQL_TRUE &&
retcodeStatistics == SQL_SUCCESS && StatisticsExists == SQL_TRUE)
{
// Continue with application
}
SQLDisconnect(hdbc);
Ve druhém příkladu aplikace ODBC 3.x volá SQLGetFunctions a předá mu pole, ve kterém SQLGetFunctions vrací informace o všech funkcích ODBC 3.x a starších.
RETCODE retcodeTables, retcodeColumns, retcodeStatistics
SQLUSMALLINT fExists[SQL_API_ODBC3_ALL_FUNCTIONS_SIZE];
retcode = SQLGetFunctions(hdbc, SQL_API_ODBC3_ALL_FUNCTIONS, fExists);
// SQLGetFunctions is completed successfully and SQLTables, SQLColumns, and SQLStatistics are supported by the driver.
if (retcode == SQL_SUCCESS &&
SQL_FUNC_EXISTS(fExists, SQL_API_SQLTABLES) == SQL_TRUE &&
SQL_FUNC_EXISTS(fExists, SQL_API_SQLCOLUMNS) == SQL_TRUE &&
SQL_FUNC_EXISTS(fExists, SQL_API_SQLSTATISTICS) == SQL_TRUE)
{
// Continue with application
}
SQLDisconnect(hdbc);
Třetím příkladem je aplikace ODBC 2.x, která volá SQLGetFunctions a předá mu pole o 100 prvcích, ve kterém SQLGetFunctions vrací informace o všech funkcích ODBC 2.x a starších.
#define FUNCTIONS 100
RETCODE retcodeTables, retcodeColumns, retcodeStatistics
SQLUSMALLINT fExists[FUNCTIONS];
retcode = SQLGetFunctions(hdbc, SQL_API_ALL_FUNCTIONS, fExists);
/* SQLGetFunctions is completed successfully and SQLTables, SQLColumns, and SQLStatistics are supported by the driver. */
if (retcode == SQL_SUCCESS &&
fExists[SQL_API_SQLTABLES] == SQL_TRUE &&
fExists[SQL_API_SQLCOLUMNS] == SQL_TRUE &&
fExists[SQL_API_SQLSTATISTICS] == SQL_TRUE)
{
/* Continue with application */
}
SQLDisconnect(hdbc);
Související funkce
| Informace o | Podívejte se |
|---|---|
| Vrácení nastavení atributu připojení | FUNKCE SQLGetConnectAttr |
| Vrácení informací o ovladači nebo datovém zdroji | Funkce SQLGetInfo |
| Vrácení nastavení atributu příkazu | FUNKCE SQLGetStmtAttr |