Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygunluk
Kullanıma Sunulan Sürüm: ODBC 1.0 Standartları Uyumluluğu: ISO 92
Summary
SQLGetFunctions, bir sürücünün belirli bir ODBC fonksiyonunu destekleyip desteklemediğine dair bilgi sağlar. Bu fonksiyon Driver Manager'da uygulanmıştır; Ayrıca sürücülerde de uygulanabilir. Bir sürücü SQLGetFunctions uygularsa, Driver Manager bu fonksiyonu sürücüde çağırır. Aksi takdirde, fonksiyonun kendisi çalıştırılır.
Syntax
SQLRETURN SQLGetFunctions(
SQLHDBC ConnectionHandle,
SQLUSMALLINT FunctionId,
SQLUSMALLINT * SupportedPtr);
Arguments
ConnectionHandle
[Giriş] Bağlantı tutamacı.
FunctionId
[Giriş] İlgi duyulan ODBC fonksiyonunu tanımlayan #define bir değer; SQL_API_ODBC3_ALL_FUNCTIONS orSQL_API_ALL_FUNCTIONS.
SQL_API_ODBC3_ALL_FUNCTIONS , ODBC 3*.x* ve önceki fonksiyonların desteklenmesini belirlemek için ODBC 3*.x* uygulaması tarafından kullanılır.
SQL_API_ALL_FUNCTIONS , ODBC 2*.x* ve önceki fonksiyonların desteğini belirlemek için bir ODBC 2*.x* uygulaması tarafından kullanılır.
ODBC fonksiyonlarını tanımlayan #define değerlerin listesi için "Yorumlar" içindeki tablolara bakınız.
DesteklenenPtr
[Çıkış] FunctionId tek bir ODBC fonksiyonunu tanımlıyorsa, SupportedPtr tek bir SQLUSMALLINT değerine işaret eder; bu değer sürücü tarafından destekleniyorsa SQL_TRUE, desteklenmiyorsa SQL_FALSE değerdir.
FunctionId SQL_API_ODBC3_ALL_FUNCTIONS ise, SupportedPtr SQL_API_ODBC3_ALL_FUNCTIONS_SIZE'a eşit eleman sayısına sahip bir SQLSMALLINT dizisini gösterir. Bu dizi, Driver Manager tarafından 4.000-bit bitlik bir harita olarak ele alınır ve ODBC 3*.x* veya daha önceki bir fonksiyonun desteklenip desteklenmediğini belirlemek için kullanılabilir. SQL_FUNC_EXISTS makrosu, fonksiyon desteğini belirlemek için çağrılır. ("Yorumlar" bölümüne bakınız.) Bir ODBC 3*.x* uygulaması, ODBC 3*.x* veya ODBC 2*.x* sürücüsüne karşı SQL_API_ODBC3_ALL_FUNCTIONS ile SQLGetFunctions çağırabilir.
FunctionId SQL_API_ALL_FUNCTIONS ise, SupportedPtr 100 elemanlık bir SQLUSMALLINT dizisini işaret eder. Dizi, FunctionId tarafından her ODBC fonksiyonunu tanımlamak için kullanılan #define değerlerle indekslenir; dizinin bazı unsurları kullanılmamış ve gelecekte kullanılmak üzere ayrılmıştır. Bir eleman, sürücü tarafından desteklenen ODBC 2*.x* veya daha önceki bir fonksiyonu tanımlıyorsa SQL_TRUE sayılır. Sürücü tarafından desteklenmeyen bir ODBC fonksiyonu tanımlıyorsa veya ODBC fonksiyonunu tanımlamazsa SQL_FALSE önemlidir.
*SupportedPtr içinde döndürülen diziler sıfır tabanlı indeksleme kullanır.
İadeler
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR veya SQL_INVALID_HANDLE.
Diagnostics
SQLGetFunctions SQL_ERROR veya SQL_SUCCESS_WITH_INFO döndürdüğünde, ilişkili bir SQLSTATE değeri alınır; bu değer SQLGetDiagRec ile SQL_HANDLE_DBC HandleType ve ConnectionHandle ile çağrılar. Aşağıdaki tablo, SQLGetFunctions tarafından sıkça duygulanan SQLSTATE değerlerini listeler ve her birini bu fonksiyonun bağlamında açıklar; "(DM)" gösterimi, Sürücü Yöneticisi tarafından döndürülen SQLSTATE açıklamalarından önce gelir. Aksi belirtilmediği sürece, her SQLSTATE değeriyle ilişkili dönüş kodu SQL_ERROR.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Genel uyarı | Sürücüye özgü bilgilendirici ileti. (İşlev SQL_SUCCESS_WITH_INFO döndürür.) |
| 08S01 | İletişim bağlantısı hatası | sürücü ile sürücünün bağlandığı veri kaynağı arasındaki iletişim bağlantısı, işlev işlenmeden önce başarısız oldu. |
| HY000 | Genel hata | Belirli bir SQLSTATE olmayan ve uygulamaya özgü SQLSTATE tanımlanmayan bir hata oluştu. *MessageText arabelleğinde SQLGetDiagRec tarafından döndürülen hata iletisi, hatayı ve nedenini açıklar. |
| HY001 | Bellek ayırma hatası | Sürücü, işlevin yürütülmesini veya tamamlanmasını desteklemek için gereken belleği ayıramadı. |
| HY010 | İşlev dizisi hatası | (DM) SQLGetFunctions , SQLConnect, SQLBrowseConnect veya SQLDriverConnect'ten önce çağrılmıştır. (DM) ConnectionHandle için SQLBrowseConnect çağrıldı ve SQL_NEED_DATA dönerdi. Bu fonksiyon, SQLBrowseConnect SQL_SUCCESS_WITH_INFO veya SQL_SUCCESS dönmeden önce çağrılmıştır. (DM) ConnectionHandle için SQLExecute, SQLExecDirect veya SQLMoreResults çağrıldı ve SQL_PARAM_DATA_AVAILABLE dönerdi. Bu işlev, tüm akış parametreleri için veri alınmadan önce çağrıldı. |
| HY013 | Bellek yönetimi hatası | Büyük olasılıkla düşük bellek koşulları nedeniyle, temel alınan bellek nesnelerine erişilemediğinden işlev çağrısı işlenemedi. |
| HY095 | Fonksiyon tipi menzil dışı | (DM) Geçersiz bir FunctionId değeri belirtildi. |
| HY117 | Bilinmeyen işlem durumu nedeniyle bağlantı askıya alındı. Yalnızca bağlantıyı kesme ve salt okunur işlevlere izin verilir. | (DM) Askıya alınma durumu hakkında daha fazla bilgi için bkz. SQLEndTran İşlevi. |
| HYT01 | Bağlantı zaman aşımı süresi doldu | Veri kaynağı isteği yanıtlamadan önce bağlantı zaman aşımı süresi doldu. Bağlantı zaman aşımı süresi SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT aracılığıyla ayarlanır. |
Comments
SQLGetFunctions her zaman SQLGetFunctions, SQLDataSources ve SQLDrivers desteklendiğini döndürür. Bunu, bu fonksiyonların Sürücü Yöneticisi'nde uygulandığı için yapılır. Sürücü Yöneticisi, eğer Unicode fonksiyonu varsa, bir ANSI fonksiyonunu karşılık gelen Unicode fonksiyonuna eşler, eğer ANSI fonksiyonu varsa bir Unicode fonksiyonunu ilgili ANSI fonksiyonuna eşler. Uygulamaların SQLGetFunctions'ı nasıl kullandığına dair bilgi için Arayüz Uyum Seviyeleri'ne bakınız.
Aşağıda, ISO 92 standartlarına uyum seviyesine uygun fonksiyonlar için geçerli FunctionId değerleri listesi verilmiştir:
| FunctionId Değeri | FunctionId Değeri |
|---|---|
| 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 |
Aşağıda, Open Group standartlarına uyum seviyesine uygun fonksiyonlar için FunctionId için geçerli değerlerin bir listesi bulunmaktadır:
| FunctionId Değeri | FunctionId Değeri |
|---|---|
| SQL_API_SQLCOLUMNS | SQL_API_SQLSTATISTICS |
| SQL_API_SQLSPECIALCOLUMNS | SQL_API_SQLTABLES |
Aşağıda, ODBC standartlarına uyum seviyesine uygun fonksiyonlar için FunctionId için geçerli değerlerin bir listesi yer almaktadır.
| FunctionId Değeri | FunctionId Değeri |
|---|---|
| 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* sürücüsüyle çalışırken, SQLBulkOperations yalnızca aşağıdaki iki durum doğruysa, desteklendiği şekilde geri döner: ODBC 2*.x* sürücüsü SQLSetPos'u destekler ve bilgi tipi SQL_POS_OPERATIONS SQL_POS_ADD biti ayarlandığı gibi döndürür.
Aşağıda, ODBC 3.8 veya daha sonrasında tanıtılan fonksiyonlar için geçerli FunctionId değerleri listesi verilmiştir:
| FunctionId Değeri |
|---|
| SQL_API_SQLCANCELHANDLE [2] |
[2] SQLCancelHandle yalnızca sürücü hem SQLCancel hem de SQLCancelHandle destekliyorsa desteklenmiş olarak geri döner. Eğer SQLCancel destekleniyorsa ancak SQLCancelHandle desteklenmiyorsa, uygulama yine de bir ifade tutamacında SQLCancelHandle çağırabilir, çünkü bu özet SQLCancel'e eşlenir.
SQL_FUNC_EXISTS Makro
SQL_FUNC_EXISTS(SupportedPtr, FunctionID) makrosu, SQLGetFunctions SQL_API_ODBC3_ALL_FUNCTIONS FunctionId argümanı ile çağrıldıktan sonra ODBC 3*.x* veya önceki fonksiyonların desteğini belirlemek için kullanılır. Uygulama, SupportedPtr argümanı SQLGetFunctions'ta iletilen SupportedPtr'e ayarlanarak ve FunctionID argümanı fonksiyonun #define olarak ayarlanmış şekilde SQL_FUNC_EXISTS çağırır. SQL_FUNC_EXISTS fonksiyon destekleniyorsa SQL_TRUE döndürür, aksi takdirde SQL_FALSE verir.
Note
ODBC 2*.x* sürücüsü ile çalışırken, ODBC 3*.x* Sürücü Yöneticisi SQLAllocHandle ve SQLFreeHandle için SQL_TRUE döner; çünkü SQLAllocHandleSQLAllocEnv, SQLAllocConnect veya SQLAllocStmt ile eşlenmiştir ve SQLFreeHandleSQLFreeEnv, SQLFreeConnect veya SQLFreeStmt ile eşlenmiştir. HandleType argümanı SQL_HANDLE_DESC olan SQLAllocHandle veya SQLFreeHandle desteklenmez, çünkü SQL_TRUE bu durumda eşleyebileceğiniz ODBC 2*.x* fonksiyonu yoktur.
Kod Örneği
Aşağıdaki üç örnek, bir uygulamanın bir sürücünün SQLTables, SQLColumn ve SQLStatistics'i destekleyip desteklemediğini belirlemek için SQLGetFunctions kullandığını göstermektedir. Sürücü bu fonksiyonları desteklemiyorsa, uygulama sürücüden bağlantıyı kopar. İlk örnek, her fonksiyon için SQLGetFunctions'ı bir kez çağırır.
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);
İkinci örnekte, bir ODBC 3.x uygulaması SQLGetFunctions'u çağırır ve ona SQLGetFunctions'ın tüm ODBC 3.x ve önceki fonksiyonlar hakkında bilgi döndürdüğü bir dizi iletir.
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);
Üçüncü örnek, bir ODBC 2.x uygulaması SQLGetFunctions'u çağırır ve ona SQLGetFunctions'ın tüm ODBC 2.x ve önceki fonksiyonlar hakkında bilgi döndürdüğü 100 elemanlık bir dizi iletir.
#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);
İlgili Fonksiyonlar
| Hakkında bilgi için | Bkz: |
|---|---|
| Bağlantı özniteliğinin ayarını döndürme | SQLGetConnectAttr İşlevi |
| Bir sürücü veya veri kaynağı hakkında bilgi döndürmek | SQLGetInfo Fonksiyonu |
| Deyim özniteliğinin ayarını döndürme | SQLGetStmtAttr İşlevi |