ODBC(Open Database Conectivity)即開放式數據庫互聯,作為Windows開放性結構的一個重要部分已經為很多的Windows程序員所熟悉,ODBC的工作依賴于數據庫制造商提供的驅動程序,使用ODBC API的時候,Windows的ODBC管理程序,把數據庫訪問的請求傳遞給正確的驅動程序,驅動程序再使用SQL語句指示DBMS完成數據庫訪問工作。
一般來說,實現數據庫到ODBC驅動程序管理器的注冊有以下兩種方法:一是編程時手工配置ODBC數據源,發布時使用InstallShield等安裝制作軟件自動配置ODBC數據源;二是考慮用程序替用戶完成這些配置工作,實現的方法有幾種,一種辦法是用程序修改Windows注冊表,程序員可以用Windows API函數增改HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中的鍵值,這種方法比較煩瑣,另一種是在程序中使用ODBC API的方法,程序員可以在任何時候都可以用Visual C++編寫的程序調用這些API函數來設置ODBC數據源。
創建ODBC數據源可以調用Windows系統子目錄下的動態鏈接庫ODBCCP32.DLL中的函數SQLConfigDataSource(),該函數可以動態地增加、修改和刪除數據源。
SQLConfigDataSource()的原型如下:
BOOL SQLConfigDataSource(HWND hwndParent, UINT fRequest, LPCSTR IpszDriver, LPCSTR IpszAttributes);
其中四個參數的用法如下:
●參數hwndPwent是父級窗口句柄。如果句柄為NULL,將不會顯示一些有關的對話框。如果參數 IpszAttributes提供的信息不夠完善,在創建過程中就會出現對話框要求用戶提供相應信息。
●參數fRequest可以設置為下面的數值之一:
ODBC_ADD_DSN: 增加_個新數據源
ODBC_CONHG_DSN: 配置(修改)一個已經存在的數據源
ODBC_REMOVE_DSN: 刪除一個已經存在的數據源
ODBC_ADD_SYS_DSN: 增加一個新的系統數據源
ODBC_CONFIG_SYS_DSN: 更改一個已經存在的系統數據源
ODBC_REMOVE_SYS_DSN: 刪除一個已經存在的系統數據源
●參數lpszDriver是數據庫引擎名稱,可以參見ODBC管理器中對ODBC驅動程序的描述。比如要加載的是Excel數據庫,那么數據庫引擎名稱就為Microsoft Excel Driver(*.xls)
●參數lpszAttributes為一連串的"KeyName=value"字符串,每兩個KeyName值之間用\0""字符隔開(或者\0隔開即可)。KeyName主要是新數據源缺省的驅動程序注冊說明,其中最主要的關鍵字是"DSN"(新數據源的名稱)和"DBQ"(數據源的地址),其余關鍵字則根據不同的數據源有不同要求。關于lpszAttributes參數的具體設置,詳細可以參考Windows系統目錄下幫助文件Odbcjtn.hlp主題目錄標簽中的"ODBC API函數改變|SQLConfigDatasource"條目。
SqlConfigDataSource的應用條件:
使用SqlConfigDataSource函數之前,必須把ODBCINST.H文件包含在工程頭文件中,將ODBCCP32.LIB加入工程,同時保證ODBCCP32.DLL運行時處于系統子目錄下。
若使用VC6.0,在安裝目錄中的Lib文件夾下尋找ODBCCP32.LIB并添加到工程中;若使用的是VC2005,貌似安裝目錄的lib文件夾下沒有該lib文件,只能使用VC6.0下的......
例:







SQLConfigDataSource這個函數應該是在ODBCCP32.DLL中而不是Odbcint.dll中.
樓主能給點建議嗎?
comgarden@126.com
謝謝
我現在是通過配置注冊表實現的,用這種方式還沒試通
返回false就是說打開失敗,可以看看你的函數參數是否設置正確,尤其是最后三項。