SQLGetFunctions İşlevi

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);  
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