用Visual C++程序實現設置ODBC數據源

用Visual C++程序實現設置ODBC數據源

蘇州供電局信息中心
唐一均

---- ODBC(Open Database Conectivity)即開放式數據庫互聯,作爲Windows開放性結構的一個重要部分已經爲很多的Windows程序員所熟悉,ODBC的工作依賴於數據庫製造商提供的驅動程序,使用ODBC API的時候,Windows的ODBC管理程序,把數據庫訪問的請求傳遞給正確的驅動程序,驅動程序再使用SQL語句指示DBMS完成數據庫訪問工作,因此,ODBC的存在爲我們開發應用數據庫程序提供了非常強大的能力和靈活性。

---- 爲了使ODBC能與數據庫一起工作,必須把數據庫註冊到ODBC驅動程序管理器,這項工作可以通過定義一個DSN或數據源名字來完成。通常,我們只能手動打開系統控制面板,運行其中的ODBC數據源管理器,手工配置數據源,但是這項工作對用戶而言過於複雜,我們必須考慮用程序替用戶完成這些配置工作。

---- 因此許多程序員在發佈自己編寫的數據庫軟件時候都希望能有一個優秀的安裝程序能夠自動設置好ODBC數據源,雖然現在InstallShield等一些優秀的安裝製作軟件可以幫助我們實現此類功能,但畢竟缺少靈活,程序員不能完全控制它,事實上,我們完全可以自己編寫一些程序實現此類功能,實現的方法有幾種,一種辦法是用程序修改Windows註冊表,程序員可以用Windows API函數增改HKEY_LOCAL_MACHINE/Software/ODBC下的ODBC.INI中的鍵值,這種方法比較煩瑣。我現在推薦一種在程序中使用ODBC API的方法,程序員可以在任何時候都可以用Visual C++編寫的程序調用這些API函數來設置ODBC數據源。

---- 下面我用MFC寫一個程序來演示如何實現這個功能:

---- 首先,打開Visual C++,在File菜單上選New,然後選定MFC AppWizard(exe)類的項目,Project name我們定爲try,按下OK鍵,下一Step 1屏幕中選Dialog based,由於不必用到後面的選項,此時即可按下Finish鍵,結果系統將生成一個新的項目。完成上述工作後,在左側Workspace窗口中,選擇ResourceView,打開try resources中的Dialog資源,選擇並打開IDD_TRY_DIALOG對話窗口,在Controls菜單窗口中點選按鍵圖標,回到IDD_TRY_DIALOG對話窗口並點擊此窗口,將生成一個名叫Button1的按鍵,選中此按鍵再按鼠標右鍵,在彈出式菜單上選Properties選項,在出現的對話框中把Caption項的Button1值改爲Setup ODBC,關閉此對話框,再選中此按鍵按鼠標右鍵,選擇ClassWizard,在出現的對話窗口中,Object Ids選IDC_BUTTON1,Messages中雙擊BN_CLICKED,此時彈出Add Member Function對話窗,Member function name是OnButton1,按OK鍵。在Member functions選項中雙擊onButton1 ON_IDC_BUTTION1:BN_CLICKED,在出現的void CTryDlg::OnButton1()函數中用以下ODBC API函數語句替換 //TODO: Add your control notification handler code here這條註釋語句:

  SQLConfigDataSource(NULL,ODBC_ADD
_SYS_DSN,"Microsoft Access Driver (*.mdb)/0","
DSN=TryDB/0DBQ=D://Database/try.mdb/0DEFAULTDIR=D://DATABASE/0/0");
  '
---- 您可以根據您不同的設置需要修改上面的語句,SQLConfigDataSource一般有以下幾個許可的參數:ODBC_ADD_DSN: 加入一個新的用戶數據源,ODBC_CONFIG_DSN: 修改一個存在的用戶數據源,ODBC_REMOVE_DSN: 刪除一個存在的用戶數據源,ODBC_ADD_SYS_DSN: 增加一個新的系統數據源,ODBC_CONFIG_SYS_DSN: 修改一個存在的系統數據源,ODBC_REMOVE_SYS_DSN: 刪除一個存在的系統數據源,ODBC_REMOVE_DEFAULT_DSN: 刪除省缺的數據源說明部分。需要注意的是,當我們使用SQLConfigDataSource ODBC API函數時必須聲明包含系統的odbcinst.h頭文件,所以我們再選擇workspace窗口中FileView打開Header Files中try.h,在其中加入#include "odbcinst.h",如果不加入這個頭文件,系統編譯時就會顯示undeclared identifier錯誤,在完成上述步驟後,假如我們立即編譯並Link這個項目,會發現出現下面的錯誤:
tryDlg.obj : error LNK2001: unresolved
external symbol _SQLConfigDataSource@16
Debug/try.exe : fatal error LNK1120: 
1 unresolved externals
----  有些人可能因爲找不出錯誤而放棄了,其實這是因爲當我們使用SQLConfigDataSource 這個API函數時候必須用到odbccp32.dll,它是Microsoft提供的32位ODBC安裝和管理的DLL,如果是16位必須用到odbcinst.dll,odbccp32.dll有一個import library,所以解決的辦法就是把這個odbccp32.lib加到我們的項目中,我們可以打開Project系統菜單項,選Add to Project子菜單,在其中選Files項,打開VC安裝目錄下的/vc/lib/目錄,文件類型選Library Files(.lib), 選擇其中Odbccp32.lib後按OK鍵,然後重新編譯即可通過,運行這個程序,將彈出對話窗,按下Setup ODBC按鍵,之後,您就可以通過控制面板的ODBC數據源管理器或註冊表查看運行結果,您會發現,您的數據庫已經成功的註冊了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章