Fungsi SQLGetFunctions

Kesesuaian
Versi diperkenalkan: Kepatuhan Standar ODBC 1.0: ISO 92

Summary
SQLGetFunctions mengembalikan informasi tentang apakah sebuah driver mendukung fungsi ODBC tertentu. Fungsi ini diimplementasikan di Driver Manager; Fitur ini juga dapat diimplementasikan di driver. Jika sebuah driver mengimplementasikan SQLGetFunctions, Driver Manager akan memanggil fungsi tersebut di dalam driver. Jika tidak, fungsi itu sendiri akan dijalankan.

Syntax

  
SQLRETURN SQLGetFunctions(  
     SQLHDBC           ConnectionHandle,  
     SQLUSMALLINT      FunctionId,  
     SQLUSMALLINT *    SupportedPtr);  

Arguments

ConnectionHandle
[Input] Handle koneksi.

FunctionId
[Input] Nilai #define yang mengidentifikasi fungsi ODBC yang diminati; SQL_API_ODBC3_ALL_FUNCTIONS orSQL_API_ALL_FUNCTIONS. SQL_API_ODBC3_ALL_FUNCTIONS digunakan oleh aplikasi ODBC 3*.x* untuk menentukan dukungan fungsi ODBC 3*.x* dan sebelumnya. SQL_API_ALL_FUNCTIONS digunakan oleh aplikasi ODBC 2*.x* untuk menentukan dukungan ODBC 2*.x* dan fungsi-fungsi sebelumnya.

Untuk daftar nilai #define yang mengidentifikasi fungsi ODBC, lihat tabel di "Komentar."

SupportedPtr
[Output] Jika FunctionId mengidentifikasi satu fungsi ODBC, SupportedPtr menunjuk ke satu nilai SQLUSMALLINT yang SQL_TRUE jika fungsi yang ditentukan didukung oleh driver, dan SQL_FALSE jika tidak didukung.

Jika FunctionId SQL_API_ODBC3_ALL_FUNCTIONS, SupportedPtr menunjuk ke array SQLSMALLINT dengan jumlah elemen sama dengan SQL_API_ODBC3_ALL_FUNCTIONS_SIZE. Array ini diperlakukan oleh Driver Manager sebagai bitmap 4.000-bit yang dapat digunakan untuk menentukan apakah fungsi ODBC 3*.x* atau yang lebih awal didukung. Makro SQL_FUNC_EXISTS dipanggil untuk menentukan dukungan fungsi. (Lihat "Komentar.") Aplikasi ODBC 3*.x* dapat memanggil SQLGetFunctions dengan SQL_API_ODBC3_ALL_FUNCTIONS terhadap driver ODBC 3*.x* atau ODBC 2*.x*.

Jika FunctionId SQL_API_ALL_FUNCTIONS, SupportedPtr menunjuk ke array SQLUSMALLINT dengan 100 elemen. Array diindeks berdasarkan nilai #define yang digunakan oleh FunctionId untuk mengidentifikasi setiap fungsi ODBC; Beberapa elemen array tidak digunakan dan disimpan untuk penggunaan di masa mendatang. Sebuah elemen SQL_TRUE jika mengidentifikasi fungsi ODBC 2*.x* atau lebih awal yang didukung oleh driver. Ini SQL_FALSE jika mengidentifikasi fungsi ODBC yang tidak didukung oleh driver atau tidak mengidentifikasi fungsi ODBC.

Array yang dikembalikan dalam *SupportedPtr menggunakan indeksasi berbasis nol.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, atau SQL_INVALID_HANDLE.

Diagnostics

Ketika SQLGetFunctions mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_DBC dan HandleConnectionHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umum dikembalikan oleh SQLGetFunctions dan menjelaskan masing-masing dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATE yang dikembalikan oleh Driver Manager. Kode pengembalian yang terkait dengan setiap nilai SQLSTATE SQL_ERROR, kecuali disebutkan sebaliknya.

SQLSTATE Kesalahan Deskripsi
01000 Peringatan umum Pesan informasi khusus driver. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
08S01 Kegagalan tautan komunikasi Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses.
HY000 Kesalahan umum Terjadi kesalahan yang tidak ada SQLSTATE tertentu dan tidak ada SQLSTATE khusus implementasi yang ditentukan. Pesan kesalahan yang dikembalikan oleh SQLGetDiagRec di buffer *MessageText menjelaskan kesalahan dan penyebabnya.
HY001 Kesalahan alokasi memori Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi.
HY010 Kesalahan urutan fungsi (DM) SQLGetFunctions disebut sebelum SQLConnect, SQLBrowseConnect, atau SQLDriverConnect.

(DM) SQLBrowseConnect dipanggil untuk ConnectionHandle dan mengembalikan SQL_NEED_DATA. Fungsi ini dipanggil sebelum SQLBrowseConnect mengembalikan SQL_SUCCESS_WITH_INFO atau SQL_SUCCESS.

(DM) SQLExecute, SQLExecDirect, atau SQLMoreResults dipanggil untuk ConnectionHandle dan mengembalikan SQL_PARAM_DATA_AVAILABLE. Fungsi ini dipanggil sebelum data diambil untuk semua parameter yang dialirkan.
HY013 Kesalahan manajemen memori Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah.
HY095 Jenis fungsi di luar jangkauan (DM) Nilai FunctionId tidak valid telah ditentukan.
HY117 Koneksi ditangguhkan karena status transaksi yang tidak diketahui. Hanya fungsi putuskan sambungan dan baca-saja yang diizinkan. (DM) Untuk informasi selengkapnya tentang status ditangguhkan, lihat Fungsi SQLEndTran.
HYT01 Waktu tunggu koneksi habis Periode batas waktu koneksi kedaluwarsa sebelum sumber data merespons permintaan. Periode batas waktu koneksi diatur melalui SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.

Komentar

SQLGetFunctions selalu mengembalikan bahwa SQLGetFunctions, SQLDataSources, dan SQLDrivers didukung. Ini terjadi karena fungsi-fungsi tersebut diimplementasikan di Driver Manager. Driver Manager akan memetakan fungsi ANSI ke fungsi Unicode yang sesuai jika fungsi Unicode tersebut ada dan akan memetakan fungsi Unicode ke fungsi ANSI yang sesuai jika fungsi ANSI tersebut ada. Untuk informasi tentang bagaimana aplikasi menggunakan SQLGetFunctions, lihat Tingkat Kesesuaian Antarmuka.

Berikut adalah daftar nilai valid untuk FunctionId untuk fungsi yang sesuai dengan tingkat kepatuhan standar ISO 92:

Nilai FunctionId Nilai FunctionId
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

Berikut adalah daftar nilai valid untuk FunctionId untuk fungsi yang sesuai dengan tingkat kepatuhan standar Open Group:

Nilai FunctionId Nilai FunctionId
SQL_API_SQLCOLUMNS SQL_API_SQLSTATISTICS
SQL_API_SQLSPECIALCOLUMNS SQL_API_SQLTABLES

Berikut adalah daftar nilai valid untuk FunctionId untuk fungsi yang sesuai dengan tingkat kepatuhan standar ODBC.

Nilai FunctionId Nilai FunctionId
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] Saat bekerja dengan driver ODBC 2*.x*, SQLBulkOperations hanya akan dikembalikan sebagai didukung jika kedua hal berikut benar: driver ODBC 2*.x* mendukung SQLSetPos, dan tipe informasi SQL_POS_OPERATIONS mengembalikan bit SQL_POS_ADD sebagai ditetapkan.

Berikut adalah daftar nilai valid untuk FunctionId pada fungsi yang diperkenalkan di ODBC 3.8 atau lebih baru:

Nilai FunctionId
SQL_API_SQLCANCELHANDLE [2]

[2] SQLCancelHandle hanya akan dikembalikan sebagai dukungan jika driver mendukung keduanya SQLCancel dan SQLCancelHandle. Jika SQLCancel didukung tetapi SQLCancelHandle tidak, aplikasi masih dapat memanggil SQLCancelHandle pada handle pernyataan, karena akan dipetakan ke SQLCancel.

SQL_FUNC_EXISTS Makro

Makro SQL_FUNC_EXISTS(SupportedPtr, FunctionID) digunakan untuk menentukan dukungan ODBC 3*.x* atau fungsi sebelumnya setelah SQLGetFunctions dipanggil dengan argumen FunctionId sebesar SQL_API_ODBC3_ALL_FUNCTIONS. Aplikasi memanggil SQL_FUNC_EXISTS dengan argumen SupportedPtr yang diatur ke SupportedPtr yang diteruskan di SQLGetFunctions, dan dengan argumen FunctionID diatur ke #define fungsi tersebut. SQL_FUNC_EXISTS mengembalikan SQL_TRUE jika fungsi didukung, dan SQL_FALSE sebaliknya.

Note

Saat bekerja dengan driver ODBC 2*.x*, Driver Manager ODBC 3*.x* akan mengembalikan SQL_TRUE untuk SQLAllocHandle dan SQLFreeHandle karena SQLAllocHandle dipetakan ke SQLAllocEnv, SQLAllocConnect, atau SQLAllocStmt, dan karena SQLFreeHandle dipetakan ke SQLFreeEnv, SQLFreeConnect, atau SQLFreeStmt. SQLAllocHandle atau SQLFreeHandle dengan argumen HandleType SQL_HANDLE_DESC tidak didukung, meskipun SQL_TRUE dikembalikan untuk fungsi-fungsi tersebut, karena tidak ada fungsi ODBC 2*.x* yang dapat dipetakan dalam kasus ini.

Contoh Kode

Tiga contoh berikut menunjukkan bagaimana sebuah aplikasi menggunakan SQLGetFunctions untuk menentukan apakah sebuah driver mendukung SQLTables, SQLColumns, dan SQLStatistics. Jika driver tidak mendukung fungsi-fungsi ini, aplikasi akan terputus dari driver. Contoh pertama memanggil SQLGetFunctions sekali untuk setiap fungsi.

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

Pada contoh kedua, aplikasi ODBC 3.x memanggil SQLGetFunctions dan memberikannya array di mana SQLGetFunctions mengembalikan informasi tentang semua fungsi ODBC 3.x dan yang lebih awal.

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

Contoh ketiga adalah aplikasi ODBC 2.x memanggil SQLGetFunctions dan memberikannya array berisi 100 elemen di mana SQLGetFunctions mengembalikan informasi tentang semua fungsi ODBC 2.x dan yang lebih awal.

#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);  
Untuk informasi mengenai Lihat
Mengembalikan pengaturan atribut koneksi Fungsi SQLGetConnectAttr
Mengembalikan informasi tentang driver atau sumber data Fungsi SQLGetInfo
Mengembalikan pengaturan atribut pernyataan Fungsi SQLGetStmtAttr