Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Konformität
Version eingeführt: ODBC 1.0 Standards Compliance: ISO 92
Summary
SQLGetFunctions liefert Informationen darüber, ob ein Treiber eine bestimmte ODBC-Funktion unterstützt. Diese Funktion ist im Driver Manager implementiert; Sie kann auch in Treibern implementiert werden. Wenn ein Treiber SQLGetFunctions implementiert, ruft der Treibermanager die Funktion im Treiber auf. Andernfalls führt er die Funktion selbst aus.
Syntax
SQLRETURN SQLGetFunctions(
SQLHDBC ConnectionHandle,
SQLUSMALLINT FunctionId,
SQLUSMALLINT * SupportedPtr);
Argumente
ConnectionHandle
[Eingabe] Verbindungshandle.
FunctionId
[Eingabe] Ein #define Wert, der die wichtige ODBC-Funktion identifiziert; SQL_API_ODBC3_ALL_FUNCTIONS orSQL_API_ALL_FUNCTIONS.
SQL_API_ODBC3_ALL_FUNCTIONS wird von einer ODBC 3*.x*-Anwendung verwendet, um die Unterstützung von ODBC 3*.x* und früheren Funktionen zu bestimmen.
SQL_API_ALL_FUNCTIONS wird von einer ODBC 2*.x*-Anwendung verwendet, um die Unterstützung von ODBC 2*.x* und früheren Funktionen zu bestimmen.
Eine Liste #define Werte, die ODBC-Funktionen identifizieren, finden Sie in den Tabellen unter "Kommentare".
SupportedPtr
[Ausgabe] Wenn FunctionId eine einzelne ODBC-Funktion identifiziert, zeigt SupportedPtr auf einen einzelnen SQLUSMALLINT-Wert, der SQL_TRUE ist, wenn die angegebene Funktion vom Treiber unterstützt wird, und SQL_FALSE, wenn sie nicht unterstützt wird.
Wenn FunctionId SQL_API_ODBC3_ALL_FUNCTIONS ist, zeigt SupportedPtr auf ein SQLSMALLINT-Array mit einer Anzahl von Elementen gleich SQL_API_ODBC3_ALL_FUNCTIONS_SIZE. Dieses Array wird vom Driver Manager als 4.000-Bitmap behandelt, mit der bestimmt werden kann, ob eine ODBC 3*.x* oder frühere Funktion unterstützt wird. Das SQL_FUNC_EXISTS Makro wird aufgerufen, um die Funktionsunterstützung zu bestimmen. (Siehe "Kommentare.") Eine ODBC 3*.x*-Anwendung kann SQLGetFunctions mit SQL_API_ODBC3_ALL_FUNCTIONS gegen einen ODBC 3*.x* oder ODBC 2*.x*-Treiber aufrufen.
Wenn FunctionId SQL_API_ALL_FUNCTIONS ist, weist SupportedPtr auf ein SQLUSMALLINT-Array von 100 Elementen hin. Das Array wird durch #define Werte indiziert, die von FunctionId zur Identifikation jeder ODBC-Funktion verwendet werden; Einige Elemente des Arrays sind ungenutzt und für die zukünftige Nutzung reserviert. Ein Element ist SQL_TRUE, wenn es eine ODBC 2*.x* oder frühere Funktion identifiziert, die vom Treiber unterstützt wird. Es ist SQL_FALSE, ob sie eine ODBC-Funktion identifiziert, die vom Treiber nicht unterstützt wird, oder keine ODBC-Funktion identifiziert.
Die in *SupportedPtr zurückgegebenen Arrays verwenden nullbasierte Indexierung.
Rücklieferungen
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR oder SQL_INVALID_HANDLE.
Diagnostics
Wenn SQLGetFunctions SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugehöriger SQLSTATE-Wert erhalten werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_DBC und einem Handle von ConnectionHandle aufgerufen wird. Die folgende Tabelle listet die SQLSTATE-Werte auf, die häufig von SQLGetFunctions zurückgegeben werden, und erklärt jeden einzelnen im Kontext dieser Funktion; die Notation "(DM)" geht den vom Treibermanager zurückgegebenen SQLSTATE-Beschreibungen voraus. Der rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.
| SQLSTATE | Fehler | Description |
|---|---|---|
| 01000 | Allgemeiner Warnhinweis | Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.) |
| 08S01 | Kommunikationslinkfehler | Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden wurde, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde. |
| HY000 | Allgemeiner Fehler | Es ist ein Fehler aufgetreten, für den kein spezifischer SQLSTATE-Wert vorhanden war und für den keine implementierungsspezifische SQLSTATE definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und dessen Ursache. |
| HY001 | Speicherzuweisungsfehler | Der Treiber konnte speicher nicht zuordnen, der erforderlich ist, um die Ausführung oder den Abschluss der Funktion zu unterstützen. |
| HY010 | Funktionssequenzfehler | (DM) SQLGetFunctions wurde vor SQLConnect, SQLBrowseConnect oder SQLDriverConnect genannt. (DM) SQLBrowseConnect wurde für den ConnectionHandle aufgerufen und SQL_NEED_DATA zurückgegeben. Diese Funktion wurde aufgerufen, bevor SQLBrowseConnect SQL_SUCCESS_WITH_INFO oder SQL_SUCCESS zurückgab. (DM) SQLExecute, SQLExecDirect oder SQLMoreResults wurde für den ConnectionHandle aufgerufen und SQL_PARAM_DATA_AVAILABLE zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle gestreamten Parameter abgerufen wurden. |
| HY013 | Speicherverwaltungsfehler | Der Funktionsaufruf konnte nicht verarbeitet werden, da auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund geringer Arbeitsspeicherbedingungen. |
| HY095 | Funktionstyp außerhalb des Bereichs | (DM) Ein ungültiger FunctionId-Wert wurde angegeben. |
| HY117 | Die Verbindung wird aufgrund des unbekannten Transaktionsstatus angehalten. Es sind nur Trenn- und schreibgeschützte Funktionen zulässig. | (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran Function. |
| HYT01 | Verbindungstimeout abgelaufen | Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT festgelegt. |
Kommentare
SQLGetFunctions gibt immer an, dass SQLGetFunctions, SQLDataSources und SQLDrivers unterstützt werden. Dies geschieht, weil diese Funktionen im Driver Manager implementiert sind. Der Treibermanager bildet eine ANSI-Funktion auf die entsprechende Unicode-Funktion ab, falls die Unicode-Funktion existiert, und bildet eine Unicode-Funktion auf die entsprechende ANSI-Funktion ab, wenn die ANSI-Funktion existiert. Informationen darüber, wie Anwendungen SQLGetFunctions verwenden, finden Sie unter Interface Conformance Levels.
Im Folgenden finden Sie eine Liste gültiger Werte für FunctionId für Funktionen, die dem ISO-92-Standard-Compliance-Level entsprechen:
| FunctionId-Wert | FunctionId-Wert |
|---|---|
| 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 |
Im Folgenden findet sich eine Liste gültiger Werte für FunctionId für Funktionen, die dem Open Group-Standard-Compliance-Level entsprechen:
| FunctionId-Wert | FunctionId-Wert |
|---|---|
| SQL_API_SQLCOLUMNS | SQL_API_SQLSTATISTICS |
| SQL_API_SQLSPECIALCOLUMNS | SQL_API_SQLTABLES |
Im Folgenden findet sich eine Liste gültiger Werte für FunctionId für Funktionen, die dem ODBC-Standard-Compliance-Level entsprechen.
| FunctionId-Wert | FunctionId-Wert |
|---|---|
| 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] Bei der Arbeit mit einem ODBC 2*.x*-Treiber wird SQLBulkOperations nur dann als unterstützt zurückgegeben, wenn beide Folgen zutreffen: Der ODBC 2*.x*-Treiber unterstützt SQLSetPos, und der Informationstyp SQL_POS_OPERATIONS gibt das SQL_POS_ADD Bit wie festgelegt zurück.
Im Folgenden eine Liste gültiger Werte für FunctionId für Funktionen, die in ODBC 3.8 oder später eingeführt wurden:
| FunctionId-Wert |
|---|
| SQL_API_SQLCANCELHANDLE [2] |
[2] SQLCancelHandle wird nur dann als unterstützt zurückgegeben, wenn der Treiber sowohl SQLCancel als auch SQLCancelHandle unterstützt. Wenn SQLCancel unterstützt wird, SQLCancelHandle jedoch nicht, kann die Anwendung weiterhin SQLCancelHandle auf einem Anweisungshandle aufrufen, da dieser auf SQLCancel abgebildet wird.
SQL_FUNC_EXISTS Makro
Das Makro SQL_FUNC_EXISTS(SupportedPtr, FunctionID) wird verwendet, um die Unterstützung von ODBC 3*.x* oder früheren Funktionen zu bestimmen, nachdem SQLGetFunctions mit einem FunctionId-Argument von SQL_API_ODBC3_ALL_FUNCTIONS aufgerufen wurde. Die Anwendung ruft SQL_FUNC_EXISTS auf, wobei das Supported Ptr-Argument auf das in SQLGetFunctions übergegebene SupportedPtr gesetzt ist und das Argumente FunctionID auf das #define der Funktion gesetzt ist. SQL_FUNC_EXISTS gibt SQL_TRUE zurück, wenn die Funktion unterstützt wird, und SQL_FALSE anderweitig.
Note
Bei der Arbeit mit einem ODBC 2*.x*-Treiber gibt der ODBC 3*.x* Driver Manager SQL_TRUE für SQLAllocHandle und SQLFreeHandle zurück, da SQLAllocHandle auf SQLAllocEnv, SQLAllocConnect oder SQLAllocStmt abgebildet ist und SQLFreeHandle auf SQLFreeEnv, SQLFreeConnect oder SQLFreeStmt abgebildet ist. SQLAllocHandle oder SQLFreeHandle mit einem HandleType-Argument von SQL_HANDLE_DESC werden jedoch nicht unterstützt, obwohl SQL_TRUE für die Funktionen zurückgegeben wird, da es in diesem Fall keine ODBC 2*.x*-Funktion gibt, auf die man abbilden könnte.
Codebeispiel
Die folgenden drei Beispiele zeigen, wie eine Anwendung SQLGetFunctions verwendet, um zu bestimmen, ob ein Treiber SQLTables, SQLColumns und SQLStatistics unterstützt. Wenn der Treiber diese Funktionen nicht unterstützt, trennt sich die Anwendung vom Treiber. Das erste Beispiel ruft SQLGetFunctions einmal für jede Funktion auf.
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);
Im zweiten Beispiel ruft eine ODBC 3.x-Anwendung SQLGetFunctions auf und übergibt ihr ein Array, in dem SQLGetFunctions Informationen über alle ODBC 3.x- und früheren Funktionen zurückgibt.
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);
Das dritte Beispiel ist eine ODBC 2.x-Anwendung, die SQLGetFunctions aufruft und ihr ein Array von 100 Elementen übergibt, in denen SQLGetFunctions Informationen über alle ODBC 2.x- und früheren Funktionen zurückgibt.
#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);
Verwandte Funktionen
| Weitere Informationen zu | Siehe |
|---|---|
| Zurückgeben der Einstellung eines Verbindungsattributes | SQLGetConnectAttr-Funktion |
| Rückgabe von Informationen über einen Treiber oder eine Datenquelle | SQLGetInfo-Funktion |
| Zurückgeben der Einstellung eines Anweisungsattributs | SQLGetStmtAttr-Funktion |