Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megfelelőség
Bevezetett verzió: ODBC 1.0 szabványmegfelelőség: ISO 92
Summary
Az SQLGetFunctions információt ad arról, hogy egy illesztőprogram támogat-e egy adott ODBC függvényt. Ez a funkció a Driver Manager alkalmazásában van megvalósítva; Meghajtókban is megvalósítható. Ha egy illesztőprogram SQLGetFunctions-t valósít meg, a Driver Manager hívja a függvényt az illezőgépben. Ellenkező esetben maga a funkció hajtja végre.
Syntax
SQLRETURN SQLGetFunctions(
SQLHDBC ConnectionHandle,
SQLUSMALLINT FunctionId,
SQLUSMALLINT * SupportedPtr);
Arguments
ConnectionHandle
[Bemenet] Kapcsolati leíró.
FunctionId
[Bemenet] Egy #define érték, amely azonosítja az érdekelt ODBC függvényt; SQL_API_ODBC3_ALL_FUNCTIONS orSQL_API_ALL_FUNCTIONS.
SQL_API_ODBC3_ALL_FUNCTIONS egy ODBC 3*.x* alkalmazás használja az ODBC 3*.x* és korábbi funkciók támogatásának meghatározására.
SQL_API_ALL_FUNCTIONS egy ODBC 2*.x* alkalmazás használja az ODBC 2*.x* és korábbi funkciók támogatásának meghatározására.
Az ODBC függvényeket azonosító #define értékek listájáért lásd a "Kommentek" tábláit.
SupportedPtr
[Kimenet] Ha az FunctionId egyetlen ODBC függvényt azonosít, a SupportedPtr egyetlen SQLUSMALLINT értéket mutat, amely SQL_TRUE, ha a megadott függvényt támogatja az illezőprogram, és SQL_FALSE, ha nem támogatja.
Ha az FunctionID SQL_API_ODBC3_ALL_FUNCTIONS, akkor a SupportedPtr egy SQLSMALLINT tömbrére mutat, amelynek elemeinek száma SQL_API_ODBC3_ALL_FUNCTIONS_SIZE-vel. Ezt a tömböt a Driver Manager egy 4000 bites bittérképként kezeli, amely segítségével eldöntheti, támogatott-e egy ODBC 3*.x* vagy korábbi függvény. A SQL_FUNC_EXISTS makró a függvénytámogatás meghatározására van hívva. (Lásd: "Hozzászólások.") Egy ODBC 3*.x* alkalmazás képes SQLGetFunctions-t hívni SQL_API_ODBC3_ALL_FUNCTIONS egy ODBC 3*.x* vagy ODBC 2*.x* illesztőprogramdal szemben.
Ha az FunctionId SQL_API_ALL_FUNCTIONS, a SupportedPtr egy 100 elemből álló SQLUSMALLINT tömbre mutat. A tömböt #define érték indexeli, amelyeket az FunctionId használ az ODBC függvények azonosítására; a tömb egyes elemei nem használják fel és a jövőbeni használatra vannak fenntartva. Egy elem akkor SQL_TRUE, ha azonosít egy ODBC 2*.x* vagy korábbi funkciót, amelyet az illesztőprogram támogat. Ez SQL_FALSE, ha azonosít egy olyan ODBC függvényt, amelyet az illesztőprogram nem támogat, vagy nem azonosít ODBC függvényt.
A *SupportedPtr visszaadott tömbök nulla alapú indexelést használnak.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR vagy SQL_INVALID_HANDLE.
Diagnostics
Amikor az SQLGetFunctions SQL_ERROR vagy SQL_SUCCESS_WITH_INFO értéket ad, egy hozzárendelt SQLSTATE érték elérhető SQLGetDiagRec hívásával, amely egy SQL_HANDLE_DBC HandleType és egy ConnectionHandleHandle nevű HandleType segítségével szól. Az alábbi táblázat felsorolja az SQLGetFunctions által gyakran visszaadott SQLSTATE értékeket, és mindegyiket ennek a függvénynek a kontextusában magyarázza; a "(DM)" jelölés megelőzi a Driver Manager által visszaadott SQLSTATE-leírásokat. Az egyes SQLSTATE-értékekhez társított visszatérési kód SQL_ERROR, kivéve, ha másként van feltüntetve.
| SQLSTATE | Hiba | Description |
|---|---|---|
| 01000 | Általános figyelmeztetés | Illesztőprogram-specifikus tájékoztató üzenet. (A függvény SQL_SUCCESS_WITH_INFO ad vissza.) |
| 08S01 | Kommunikációs kapcsolat hibája | Az illesztőprogram és az adatforrás közötti kommunikációs kapcsolat, amelyhez az illesztőprogram csatlakoztatva volt, nem sikerült, mielőtt a függvény befejeződött a feldolgozás. |
| HY000 | Általános hiba | Hiba történt, amely miatt nem volt konkrét SQLSTATE, és amelyhez nem definiáltak implementációspecifikus SQLSTATE-t. Az SQLGetDiagRec által a *MessageText pufferben visszaadott hibaüzenet leírja a hibát és annak okát. |
| HY001 | Memóriafoglalási hiba | Az illesztőprogram nem tudta lefoglalni a függvény végrehajtásának vagy befejezésének támogatásához szükséges memóriát. |
| HY010 | Függvényütemezési hiba | (DM) Az SQLGetFunctions az SQLConnect, SQLBrowseConnect vagy SQLDriverConnect előtt volt elnevezve. (DM) Az SQLBrowseConnect-et a ConnectionHandle miatt hívták meg, és SQL_NEED_DATA visszaadták. Ezt a függvényt az SQLBrowseConnect SQL_SUCCESS_WITH_INFO vagy SQL_SUCCESS előtt hívták meg. (DM) Az SQLExecute, SQLExecDirect vagy SQLMoreResults meghívást kapott a ConnectionHandle-hez , és SQL_PARAM_DATA_AVAILABLE visszaadta. Ez a függvény az összes streamelt paraméter adatainak lekérése előtt lett meghívva. |
| HY013 | Memóriakezelési hiba | A függvényhívás nem dolgozható fel, mert a mögöttes memóriaobjektumok nem érhetők el, esetleg a memóriahiány miatt. |
| HY095 | Függvénytípus a hatótávolságon kívül | (DM) Érvénytelen FunctionId értéket határoztak meg. |
| HY117 | A kapcsolat ismeretlen tranzakciós állapot miatt fel van függesztve. Csak a leválasztási és írásvédett függvények engedélyezettek. | (DM) A felfüggesztett állapotról további információt az SQLEndTran függvényben talál. |
| HYT01 | A kapcsolati időkorlát lejárt | A kapcsolat időtúllépési időtartama lejárt, mielőtt az adatforrás válaszolt a kérésre. A kapcsolat időtúllépési időszaka az SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT keresztül van beállítva. |
Comments
Az SQLGetFunctions mindig azt mutatja, hogy az SQLGetFunctions, SQLDataSources és SQLDrivers támogatott. Ez azért történik, mert ezek a funkciók a Driver Managerben vannak megvalósítva. A Driver Manager egy ANSI függvényt jelöl le a megfelelő Unicode függvényre, ha létezik Unicode függvény, és egy Unicode függvényt a megfelelő ANSI függvényre, ha létezik az ANSI függvény. A SQLGetFunctions alkalmazások használatával kapcsolatos információkért lásd: Felületi megfelelőségi szintek.
Az alábbiakban felsoroljuk az érvényes értékeket az FunctionId számára olyan függvényekhez, amelyek megfelelnek az ISO 92 szabvány-megfelelőségi szintének:
| FunctionId érték | FunctionId érték |
|---|---|
| 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 |
Az alábbiakban felsoroljuk az érvényes értékeket az FunctionId számára olyan függvényekhez, amelyek megfelelnek az Open Group szabványok-megfelelőségi szintnek:
| FunctionId érték | FunctionId érték |
|---|---|
| SQL_API_SQLCOLUMNS | SQL_API_SQLSTATISTICS |
| SQL_API_SQLSPECIALCOLUMNS | SQL_API_SQLTABLES |
Az alábbiakban felsoroljuk az érvényes értékeket az FunctionId számára az ODBC szabványok-megfelelőségi szintjének megfelelő függvényekhez.
| FunctionId érték | FunctionId érték |
|---|---|
| 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] ODBC 2*.x* illesztőprogramdal dolgozva az SQLBulkOperations csak akkor tér vissza támogatottnak, ha mindkét következő igaz: az ODBC 2*.x* illesztőprogram támogatja az SQLSetPos-t, és az információs típus SQL_POS_OPERATIONS a beállított SQL_POS_ADD bitet adja vissza.
Az alábbiakban felsoroljuk az érvényes értékeket az FunctionId számára az ODBC 3.8 vagy későbbi verzióban bevezetett függvényekhez:
| FunctionId érték |
|---|
| SQL_API_SQLCANCELHANDLE [2] |
[2] Az SQLCancelHandle csak akkor jelenik meg támogatottnak, ha az illezőprogram támogatja mind SQLCancel-t , mind SQLCancelHandle-t. Ha az SQLCancel támogatott, de az SQLCancelHandle nem, az alkalmazás továbbra is hívhatja SQLCancelHandle-t egy utasításkezelőn, mert az SQLCancel-hez lesz leképezve.
SQL_FUNC_EXISTS Macro
A SQL_FUNC_EXISTS(SupportedPtr, FunctionID) makró segítségével meghatározzák az ODBC 3*.x* vagy korábbi függvények támogatását, miután az SQLGetFunctions-t SQL_API_ODBC3_ALL_FUNCTIONS FunctionId argumentummal hívták meg. Az alkalmazás SQL_FUNC_EXISTS-t hív azzal, hogy a SupportedPtr argumentumot az SQLGetFunctions-bentovábbított SupportedPtr-re állítják, és az FunctionID argumentumot a függvény #define-jére állítják. SQL_FUNC_EXISTS SQL_TRUE visszatér, ha a függvény támogatott, és SQL_FALSE egyébként.
Note
ODBC 2*.x* illezőprogramdal dolgozva az ODBC 3*.x* Driver Manager visszaadja a SQL_TRUE SQLAllocHandle és SQLFreeHandle számára, mivel az SQLAllocHandle az SQLAllocEnv, SQLAllocConnect vagy SQLAllocStmt térképezéssel van leképezve, és mivel az SQLFreeHandleSQLFreeEnv, SQLFreeConnect vagy SQLFreeStmt formátumra van leképezve. Az SQLAllocHandle vagy SQLFreeHandle SQL_HANDLE_DESC HandleType argumentummal azonban nem támogatott, még akkor sem, ha a függvényekhez vissza van SQL_TRUE, mert ebben az esetben nincs ODBC 2*.x* függvény, amelyhez leképezhetnénk.
Kódpélda
Az alábbi három példa bemutatja, hogyan használja egy alkalmazás az SQLGetFunctions-t annak meghatározására, hogy egy illesztőprogram támogatja a SQLTables-t, SQLColumn-t és SQLStatistics-t. Ha az illesztőprogram nem támogatja ezeket a funkciókat, az alkalmazás leválik a meghajtóról. Az első példa egyszer hívja az SQLGetFunctions-t minden függvényre.
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);
A második példában egy ODBC 3.x alkalmazás hívja az SQLGetFunctions-t , és továbbítja neki egy tömbét, amelyben az SQLGetFunctions visszaadja az összes ODBC 3.x és korábbi függvény adatait.
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);
A harmadik példa egy ODBC 2.x alkalmazás hívja az SQLGetFunctions-t , és továbbít neki egy 100 elemből álló tömbben, amelyben az SQLGetFunctions visszaadja az összes ODBC 2.x és korábbi függvény adatait.
#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);
Kapcsolódó funkciók
| Információ erről: | Nézze |
|---|---|
| Kapcsolati attribútum beállításának visszaadása | SQLGetConnectAttr függvény |
| Információ visszaküldése egy driverről vagy adatforrásról | SQLGetInfo Function |
| Utasításattribútum beállításának visszaadása | SQLGetStmtAttr függvény |