Linux下ODBC安裝配置
Linux下ODBC安裝配置
ODBC 原理
ODBC 是 Open Database Connect 即開放資料庫互連的簡稱,它是由 Microsoft 公司於 1991 年提出的一個用於訪問資料庫的統一介面標準,是應用程式和資料庫系統之間的中介軟體。它通過使用相應應用平臺上和所需資料庫對應的驅動程式與應用程式的互動來實現對資料庫的操作,避免了在應用程式中直接呼叫與資料庫相關的操作,從而提供了資料庫的獨立性。
ODBC 主要由驅動程式和驅動程式管理器組成。驅動程式是一個用以支援 ODBC 函式呼叫的模組,每個驅動程式對應於相應的資料庫,當應用程式從基於一個資料庫系統移植到另一個時,只需更改應用程式中由 ODBC 管理程式設定的與相應資料庫系統對應的別名即可。驅動程式管理器可連結到所有 ODBC 應用程式中,它負責管理應用程式中 ODBC 函式與 DLL 中函式的繫結。
ODBC 使用層次的方法來管理資料庫,在資料庫通訊結構的每一層,對可能出現依賴資料庫產品自身特性的地方, ODBC 都引入一個公共介面以解決潛在的不一致性,從而很好地解決了基於資料庫系統應用程式的相對獨立性,這也是 ODBC 一經推出就獲得巨大成功的重要原因之一。
從結構上分, ODBC 分為單束式和多束式兩類。
1.
單束式驅動程式
單束式驅動程式介於應用程式和資料庫之間,像中介驅動程式一樣資料提供一個統一的資料訪問方式。當使用者進行資料庫操作時,應用程式傳遞一個
ODBC
函式呼叫給
ODBC
驅動程式管理器,由
ODBC API
判斷該呼叫是由它直接處理並將結果返回還是送交驅動程式執行並將結果返回。由上可見,單束式驅動程式本身是一個資料庫引擎,由它直接可完成對資料庫的操作,儘管該資料庫可能位於網路的任何地方。
2.
多束式驅動程式
多束式驅動程式負責在資料庫引擎和客戶應用程式之間傳送命令和資料,它本身並不執行資料處理操作而用於遠端操作的網路通訊協議的一個介面。前端應用程式提出對資料庫處理的請求,該請求轉給
ODBC
驅動程式管理器,驅動程式管理器依據請求的情況,就地完成或傳給多束驅動程式,多束式驅動程式將請求翻譯為特定廠家的資料庫通訊介面(如
Oracle
的
SQLNet
)所能理解的形式並交於介面去處理,介面把請求經網路傳送給伺服器上的資料引擎,伺服器處理完後把結果發回給資料庫通訊介面,資料庫介面將結果傳給多束式
ODBC
驅動程式,再由驅動程式將結果傳給應用程式。
很多程式設計師已經體會到了在 Windows 平臺下的 ODBC 的益處,而在 Linux/Unix 下進行資料庫程式設計的時候卻不得不根據不同的資料庫來選擇特有的 API 進行程式設計,一旦資料庫發生了改變,所有與這些 API 相關的程式都必須進行修改。其實在 Linux/Unix 下現在也有了自己的 ODBC ,可以使我們的資料庫程式設計就像在 Windows 平臺下一樣簡單。
下面我們開始介紹 Linux/Unix 下的 ODBC :
Linux/Unix 下 ODBC 的安裝
方法一:
先下載最新的
unixODBC
原始碼包(
http://www.unixodbc.org/unixODBC-2.2.1.tar.gz
)放到
/usr/local
下,然後執行下述命令:
tar zxvf unixODBC-2.2.1.tar.gz
cd unixODBC-2.2.1
./configure --prefix=/usr/local/unixODBC-2.2.1 --includedir=/usr/include --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc
make && make install
安裝成功後, unixODBC 所需的標頭檔案都被安裝到了 /usr/inlucde 下,編譯好的庫檔案安裝到了 /usr/lib 下,與 unixODBC 相關的可執行檔案安裝到了 /usr/bin 下,配置檔案放到了 /etc 下。
方法二:
下載
rpm
包進行安裝,我們這裡以
Red Hat 7.3
為例:
unixODBC-2.2.0-5 RPM for i386
(安裝包及原始碼包)
(
ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-2.2.0-5.i386.rpm
、
ftp://ftp.rpmfind.net/linux/redhat/7.3/en/os/i386/SRPMS/unixODBC-2.2.0-5.src.rpm
)
unixODBC-devel-2.2.0-5 RPM for i386
(
ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-devel-2.2.0-5.i386.rpm
)
直接將
unixODBC-2.2.0-5.i386.rpm
和
unixODBC-devel-2.2.0-5.i386.rpm
裝入系統就可以了,命令如下:
rpm -ivh unixODBC-2.2.0-5.i386.rpm
rpm -ivh unixODBC-devel-2.2.0-5.i386.rpm
安裝好以後,所需的各個部分與上面所列的位置相同。
Linux/Unix 下 ODBC 的配置
執行 ODBCConfig 程式(在 /usr/bin 下),如下圖:
圖一: ODBCConfig 主視窗
和 Windows 下的 ODBC 設定視窗是不是很像?我想大家都能看懂吧。
第一步:安裝資料庫的
ODBC
驅動程式
Drivers
這一欄中用來設定資料庫的驅動程式,點選
Add
按鈕,會出現下圖:
圖二: ODBCConfig Driver Properties 視窗
Name 一欄填入資料庫驅動的名稱, Description 是資料庫驅動的描述, Driver 是用來選擇資料庫驅動程式的, Setup 是用來選擇資料庫驅動安裝程式的,如果你是按照上述安裝方法安裝的,這些程式都放在 /usr/lib 下,下面是資料庫驅動程式的列表:
資料庫 |
資料庫驅動程式 |
資料庫驅動安裝程式 |
TXT |
libodbctxt.so |
libodbctxtS.so |
NNTP |
libnn.so |
libodbcnnS.so |
MiniSQL |
libodbcmini.so |
libodbcminiS.so |
PostgreSQL |
libodbcpsql.so |
libodbcpsqlS.so |
MySQL |
(註釋) |
libodbcmyS.so |
Sybase/MS SQL |
(註釋) |
libtdsS.so |
Oracle |
(註釋) |
liboraodbcS.so |
註釋:
MySQL
、
Sybase/MS SQL
和
Oracle
的資料庫驅動可以在下列網址找到:
MySQL
http://www.unixodbc.org/myodbc.html
Sybase/MS SQL
http://www.freetds.org
Oracle
http://www.easysoft.org
MySQL
的驅動程式
MyODBC-2.50.39-4 RPM for i386
以及原始碼包:
ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/MyODBC-2.50.39-4.i386.rpm
ftp://ftp.redhat.com/pub/redhat/linux/7.3/en/os/i386/SRPMS/MyODBC-2.50.39-4.src.rpm
選擇好驅動程式之後,點選 "√" 儲存退出。
第二步:設定
DSN
DSN
分為
User DSN
、
System DSN
和
File DSN
三種,我們以
System DSN
為例。選中
System DSN
一欄以後,點選
Add…
按鈕就會見到下圖:
圖三:建立 DSN 選擇資料庫驅動
列表中會列出你已經安裝好的資料庫驅動程式,我這裡只裝了 MySQL 和 PostgreSQL ,然後選擇你所要使用的驅動程式,然後點選 OK 就會出現下圖:
圖四: DSN 的設定
我這裡使用的是 MySQL 的資料庫驅動,不同的資料庫,這個視窗的內容會有所不同。 Name 是資料來源的名稱, Description 是描述, Server 可以選擇伺服器,如果本機啟動了 MySQL 就可以選擇 localhost ,如果 Port 和 Socket 有特殊要求,再根據實際情況進行修改, Database 是用來選擇資料庫的,下拉選單不一定包含所有的資料庫,你可以把自己已經建立好的資料庫名稱填寫在這裡。都配置好之後,點選 "√" 儲存退出。
這樣 Linux/Unix 下的 ODBC 資料來源就已經設定好了,大家還可以在 ODBCConfig 程式的 Status 欄中檢視 ODBC 的使用情況,在 Advanced 欄中設定是否做日誌或者啟動連線池,在 About 欄中,有一個 Linux/Unix ODBC 的示意圖,在 Credits 按鈕中可以看到所有開發者的名字的列表。 ODBCConfig 程式中所有有關資料庫驅動程式的資訊被放在 odbcinst.ini (在 /etc 下)檔案中,有關 DSN 的資訊被放在 odbc.ini (在 /etc 下)檔案中,大家有興趣的話,可以自己去觀察一下。
第三步:使用
DataManager
程式瀏覽資料庫
執行
DataManager
程式之後就可以檢視
Drivers
、
System DSN
和
User DSN
這幾項內容,,在瀏覽資料庫的時候,可以在右面的
SQL
欄中輸入
SQL
語句,然後點選人形按鈕就可以執行
SQL
語句,執行結果會在
Results
一欄中顯示出來,具體情況可以見下圖:
圖五:使用 DataManager 瀏覽資料庫
第四步:使用
isql
程式檢視資料庫
unixODBC
還提供了命令臺下檢視資料庫的程式,這就是
isql
,用法如下:
isql DSN [UID [PWD]] [options]
DSN 資料來源名稱
UID 使用者 ID
PWD 使用者密碼
Options :
-b 批處理,沒有提示符的模式
-dx 設定列之間的分隔符為 x
-w 將查詢結果輸出為 HTML 格式
-c 第一行輸出列名
--version 輸出 isql 的版本號
Linux/Unix 下 ODBC 的程式設計
1
、使用
unixODBC
提供的
ODBC API
進行程式設計:
在進行程式設計之前,我們來看一下
ODBC API
中的常用資料型別與我們在
C
語言中使用的資料型別的對應關係:
型別識別符號 |
ODBC資料型別 |
C資料型別 |
SQL_C_CHAR |
SQLCHAR * |
unsigned char * |
SQL_C_SSHORT |
SQLSMALLINT |
short int |
SQL_C_USHORT |
SQLUSMALLINT |
unsigned short int |
SQL_C_SLONG |
SQLINTEGER |
long int |
SQL_C_FLOAT |
SQLREAL |
float |
SQL_C_DOUBLE |
SQLDOUBLE, SQLFLOAT |
double |
SQL_C_BINARY |
SQLCHAR * |
unsigned char * |
SQL_C_TYPE_DATE |
SQL_DATE_STRUCT |
struct tagDATE_STRUCT {SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT; |
SQL_C_TYPE_TIME |
SQL_TIME_STRUCT |
struct tagTIME_STRUCT {SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; } TIME_STRUCT; |
我們這裡使用的資料庫名稱為 test ( DSN ),這個 DSN 使用的使用者名稱是 root ,密碼為空,表的名稱是 web ,欄位情況如下:
欄位名 |
資料型別 |
id |
integer |
name |
char(40) |
size |
integer |
第一:設定
ODBC
環境控制程式碼並設定引數
首先我們需要宣告一個
ODBC
環境控制程式碼(
SQLHENV
),它可以用來獲得有關的
ODBC
環境資訊,我們需要呼叫
SQLAllocHandle ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &V_OD_Env )
來獲得這個控制程式碼,
V_OD_Env
就是要分配的
SQLHENV
型別的環境控制程式碼。分配好控制程式碼之後,你給它需要設定所使用的
ODBC
版本,你可以呼叫
SQLSetEnvAttr ( V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0 )
,
SQL_ATTR_ODBC_VERSION
是存放你定義的
ODBC
版本號的變數,
SQL_OV_ODBC3
則說明你的程式使用的是
ODBC 3.0
。
第二:設定連線控制程式碼並設定超時引數
我們需要宣告一個連線控制程式碼(
SQLHDBC
),用來存放資料庫連線資訊的,呼叫
SQLAllocHandle ( SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc )
獲得連線控制程式碼,
V_OD_hdbc
就是要分配的
SQLHDBC
型別的連線控制程式碼。分配好之後,我們可以呼叫
SQLSetConnectAttr ( V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0 )
來設定連線超時引數。
第三:連線資料庫
呼叫
SQLConnect ( V_OD_hdbc, (SQLCHAR*) "Test", SQL_NTS, (SQLCHAR*) "root", SQL_NTS, (SQLCHAR*) "", SQL_NTS )
連線我前面提到的資料庫,需要設定三個引數,就是資料庫名稱、使用者名稱和密碼(因為我的資料庫密碼為空,所以這裡的密碼也為空),後面的
SQL_NTS
的位置應該寫入這些引數的長度,如果寫的是
SQL_NTS
就是讓
SQLConnect
來決定引數的長度。
第四:分配
SQL
語句的控制程式碼並進行查詢:
需要宣告一個
SQL
語句的控制程式碼(
SQLHSTMT
),用來存放
SQL
語句資訊的,呼叫
SQLAllocHandle ( SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt )
來獲得這個控制程式碼,
V_OD_hstmt
就是我們要分配的
SQLHSTMT
型別的
SQL
語句控制程式碼。
我們的查詢語句是:
SELECT name, id FROM web ORDER BY id
執行這條查詢語句之後,查詢結果可能有很多行,但每行只有兩列,分別對應 name 和 id ,它們的資料型別為 integer 和 char* ,在 ODBC 中的資料型別識別符號為 SQL_C_ULONG 和 SQL_C_CHAR 。我們需要先宣告這樣的兩個變數來存貯查詢結果:
SQLINTEGER V_OD_id;
char V_OD_buffer[200];
然後我們需要使用 SQLBindCol 函式把查詢結果和我們定義的變數進行繫結:
SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err);
SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err);
這裡的
V_OD_err
是用來存放錯誤資訊編號的變數,型別也是
SQLINTEGER
。
接下來,我們呼叫
SQLExecDirect
來進行查詢:
SQLExecDirect ( V_OD_hstmt, "SELECT dtname,iduser FROM web order by iduser", SQL_NTS );
我們可以用
SQLNumResultCols ( V_OD_hstmt, &V_OD_colanz )
來獲得結果的列數,也可以用
SQLRowCount( V_OD_hstmt, &V_OD_rowanz )
來獲得結果的條數,
V_OD_colanz
和
V_OD_rowanz
分別儲存相應的結果,型別分別為
SQLSMALLINT
和
SQLINTEGER
。
在讀取結果之前,我們需要呼叫
SQLFetch ( V_OD_hstmt )
語句,這個語句可以用來獲得第一條結果也可以用來都下一條,有點像
next
的感覺。然後我們就可以在
V_OD_id
和
V_OD_buffer
裡面獲得每條記錄的結果了。
第五:關於關閉連線和釋放控制程式碼
關閉資料庫的連線,呼叫
SQLDisconnect ( V_OD_hdbc )
就可以了,但在關閉資料庫之前需要先釋放
SQL
語句的控制程式碼,而且在關閉資料庫之後應該釋放連線控制程式碼和
ODBC
環境控制程式碼,語句如下(按正常的順序):
SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
SQLDisconnect(V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
第六:關於上述情況中的錯誤資訊處理
我們需要定義兩個變數:
long V_OD_erg;
SQLINTEGER V_OD_err;
SQLAllocHandle 、 SQLSetEnvAttr 、 SQLSetConnectAttr 、 SQLConnect 、 SQLExecDirect 、 SQLNumResultCols 和 SQLRowCount 的呼叫結果都可以用 V_OD_erg 來儲存, V_OD_err 可以獲得 SQLBindCol 中的錯誤資訊。
第七:獲得本機的
DSN
資訊
我們可以在宣告
SQLHENV
控制程式碼之後,使用
SQLDataSources
函式來獲得本機的
DSN
資訊。程式如下:
void OD_ListDSN(void)
{
char l_dsn[100],l_desc[100];
short int l_len1,l_len2,l_next;
l_next=SQL_FETCH_FIRST;
while( SQLDataSources(V_OD_Env,l_next,l_dsn, sizeof(l_dsn),
&l_len1, l_desc, sizeof(l_desc), &l_len2) == SQL_SUCCESS)
{
printf("Server=(%s) Beschreibung=(%s)\n",l_dsn,l_desc);
l_next=SQL_FETCH_NEXT;
}
}
l_next 變數是用來指定我們所要獲得的 DSN 的類別:
SQL_FETCH_FIRST |
設定SQLDataSources()函式找到第一個可用的資料來源(可以是User DSN,也可以是Systerm DSN) |
SQL_FETCH_FIRST_USER |
設定SQLDataSources()函式找到第一個User DSN |
SQL_FETCH_FIRST_SYSTEM |
設定SQLDataSources()函式找到第一個System DSN |
SQL_FETCH_NEXT |
找到下一個資料來源,至於資料來源型別則要根據前面的定義 |
到這裡,我們在 Unix 的 C 語言下面進行 ODBC 程式設計已經講完,上述 ODBC API 需要引用以下幾個標頭檔案(這些檔案已經安裝到 /usr/include 下了):
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
另外如果大家使用 GTK 進行程式設計,由於到目前為止 GTK 還沒有加入專門處理資料庫的部件,所以大家可以在 GTK 中呼叫上述的 ODBC API 即可。
這裡附上例程供大家參考學習:
/* odbc.c
testing unixODBC
*/
#include <stdlib.h>
#include <stdio.h>
#include <odbc/sql.h>
#include <odbc/sqlext.h>
#include <odbc/sqltypes.h>
SQLHENV V_OD_Env; // Handle ODBC environment
long V_OD_erg; // result of functions
SQLHDBC V_OD_hdbc; // Handle connection
char V_OD_stat[10]; // Status SQL
SQLINTEGER V_OD_err,V_OD_rowanz,V_OD_id;
SQLSMALLINT V_OD_mlen,V_OD_colanz;
char V_OD_msg[200],V_OD_buffer[200];
int main(int argc,char *argv[])
{
// 1. allocate Environment handle and register version
V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error AllocHandle\n");
exit(0);
}
V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error SetEnv\n");
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
// 2. allocate connection handle, set timeout
V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error AllocHDB %d\n",V_OD_erg);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);
// 3. Connect to the datasource "web"
V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "Test", SQL_NTS,
(SQLCHAR*) "root", SQL_NTS,
(SQLCHAR*) "", SQL_NTS);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error SQLConnect %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1,
V_OD_stat, &V_OD_err,V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
printf("Connected !\n");
V_OD_erg=SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Fehler im AllocStatement %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err);
SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err);
V_OD_erg=SQLExecDirect(V_OD_hstmt,"SELECT dtname,iduser FROM web order by iduser",SQL_NTS);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error in Select %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
V_OD_erg=SQLNumResultCols(V_OD_hstmt,&V_OD_colanz);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
SQLDisconnect(V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
printf("Number of Columns %d\n",V_OD_colanz);
V_OD_erg=SQLRowCount(V_OD_hstmt,&V_OD_rowanz);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Number of RowCount %d\n",V_OD_erg);
SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
SQLDisconnect(V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
printf("Number of Rows %d\n",V_OD_rowanz);
V_OD_erg=SQLFetch(V_OD_hstmt);
while(V_OD_erg != SQL_NO_DATA)
{
printf("Result: %d %s\n",V_OD_id,V_OD_buffer);
V_OD_erg=SQLFetch(V_OD_hstmt);
} ;
SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
SQLDisconnect(V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
return(0);
}
2
.
QT
下進行
ODBC
程式設計
QT 3.0
提供了
Data Table
、
Data Browser
和
Data View
三個與資料庫相關的控制元件。你可以在
QT
的
Project
設定你要連線的資料庫,
Driver
一欄中選擇
QODBC3
即可,其它選項你一看就明白了。上述的三個資料庫控制元件的使用方法可以參見
QT
中相應文件,也很好使用的。
About Me
........................................................................................................................ ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除 ● 本文在itpub( http://blog.itpub.net/26736162 )、部落格園( http://www.cnblogs.com/lhrbest )和個人weixin公眾號( xiaomaimiaolhr )上有同步更新 ● 本文itpub地址: http://blog.itpub.net/26736162 ● 本文部落格園地址: http://www.cnblogs.com/lhrbest ● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/ ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826 ........................................................................................................................ ● QQ群號: 230161599 (滿) 、618766405 ● weixin群:可加我weixin,我拉大家進群,非誠勿擾 ● 聯絡我請加QQ好友 ( 646634621 ) ,註明新增緣由 ● 於 2019-05-01 06:00 ~ 2019-05-30 24:00 在魔都完成 ● 最新修改時間:2019-05-01 06:00 ~ 2019-05-30 24:00 ● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麥苗出版的資料庫類叢書 : http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麥苗OCP、OCM、高可用網路班 : http://blog.itpub.net/26736162/viewspace-2148098/ ● 小麥苗騰訊課堂主頁 : https://lhr.ke.qq.com/ ........................................................................................................................ 使用 weixin客戶端 掃描下面的二維碼來關注小麥苗的weixin公眾號( xiaomaimiaolhr )及QQ群(DBA寶典)、新增小麥苗weixin, 學習最實用的資料庫技術。
........................................................................................................................ |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2644122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DM8 Linux環境下配置ODBCLinux
- Linux下安裝java及配置(yum安裝)LinuxJava
- Linux下rsync安裝與配置Linux
- linux下安裝node npm並配置LinuxNPM
- Linux環境下nginx安裝配置LinuxNginx
- MySQL - 下載與安裝配置(Linux)MySqlLinux
- Linux下Go的安裝、配置 、升級和解除安裝LinuxGo
- Linux系統下安裝配置 OpenLDAP + phpLDAPadminLinuxLDAPHP
- 在Linux下安裝配置Cntlm代理教程Linux
- linux下Apache+PHP+MySQL安裝配置攻略LinuxApachePHPMySql
- Elasticsearch 在Linux下的安裝部署和配置ElasticsearchLinux
- 11. Oracle for Linux安裝和配置——11.2. Linux安裝和配置——11.2.2.Linux安裝(1)OracleLinux
- 11. Oracle for Linux安裝和配置——11.2. Linux安裝和配置——11.2.2.Linux安裝(2)OracleLinux
- 11. Oracle for Linux安裝和配置——11.2. Linux安裝和配置——11.2.5. Linux配置OracleLinux
- Ubuntu 16.04下安裝Oracle資料庫的ODBC驅動UbuntuOracle資料庫
- Linux環境下的Android的ADK安裝配置LinuxAndroid
- Linux & Windows 環境下 RabbitMQ 安裝與基本配置LinuxWindowsMQ
- Linux & Windows 環境下 Redis 安裝與基本配置LinuxWindowsRedis
- jdk在linux下安裝、配置環境變數JDKLinux變數
- Linux環境下elasticsearch-6.2.2安裝以及配置LinuxElasticsearch
- linux下安裝snap安裝工具Linux
- linux maven安裝與配置LinuxMaven
- Linux安裝Apollo配置中心Linux
- Linux Ubuntu安裝配置教程LinuxUbuntu
- Tiny Core Linux 安裝配置Linux
- linux-ELK安裝配置Linux
- Mysql for Linux安裝配置之—— rpm(bundle)安裝MySqlLinux
- Mysql for Linux安裝配置之—— 原始碼安裝MySqlLinux原始碼
- Linux平臺下snmp服務的安裝和配置Linux
- Linux下安裝Python,以及環境變數的配置LinuxPython變數
- Linux下安裝pymysqlLinuxMySql
- Linux下安裝jiebaLinuxJieba
- Linux下安裝GensimLinux
- Linux下SuperLU安裝Linux
- Linux下安裝GitLinuxGit
- linux下安裝pythonLinuxPython
- Linux 下安裝 ComposerLinux
- Linux下expect安裝Linux