?? 6993.htm
字號:
<HTML>
<HEAD>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
<meta HTTP-EQUIV='Expires' CONTENT=0>
<link rel='stylesheet' href='../../../../news.css'>
<style type='text/css'>
.fst{padding:0px 15px;width:770px;background:#eeeecc;border-left:1px solid #000000;border-right:1px solid #000000}
.fstdiv3 img{border:0px;border-right:8px solid #eeeecc;border-top:6px solid #eeeecc}
</style>
<title>
用Visual C++程序實現設置ODBC數據源
</title>
</HEAD>
<BODY aLink=#990000 bgColor=#ffffff bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 marginwidth=0 marginheight=0>
<center>
<TABLE align=center bgColor=#cccc99 border=0 cellPadding=2 cellSpacing=0 width=770>
<TBODY>
<TR>
<TH align=left >
用Visual C++程序實現設置ODBC數據源
</TH>
</TD></TR>
</TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0 width=770>
<TBODY>
<TR><TD colSpan=5 >
<a href='http://www.csdn.net'>中國軟件開發網絡</a>
-->
<a href='http://www.csdn.net/develop'>開發圖書館</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
'>
Visual C++
</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
&smallclassid=
107
'>
數據庫操作
</a>
-->
<a href='
http://www.csdn.net/develop/library/vc/datebase/6993.shtm
'>
用Visual C++程序實現設置ODBC數據源
</a>
</TD></tr>
<TR>
<TD align=left width=300>
<B>關鍵字:</B><BR>
VC++、ODBC
</TD>
<TD align=middle width=120>
<B>貼文時間</B><br>
2001-5-10 21:38:53
</TD>
<TD align=middle width=80>
<B>文章類型: </B><BR>
收藏
</TD>
<TD align=middle width=100>
<B>給貼子投票 </B>
<BR><a href='http://www.csdn.net/develop/addscore.asp?id=
6993
'>投票</a>
</TD></TR>
<TR>
<TD >
iBreathe
收藏
</TD>
<TD colSpan=3 vAlign=top>
<B>出處: </B><A href='
'>
</A></TD></TR>
<TR><TD colSpan=5 bgcolor=#cccc99> </TD></TR>
</TD></TR></TBODY></TABLE>
<div align=center><div class=fst align=left><div class=fstdiv3 id=print2>
<br><br><CENTER><FONT color=#0000c0>
<H2>用Visual C++程序實現設置ODBC數據源 </H2></FONT>
<H3>蘇州供電局信息中心 <BR>唐一均 </H3></CENTER>
<P><FONT color=#ffffff>----</FONT> ODBC(Open Database Conectivity)即開放式數據庫互聯,作為Windows開放性結構的一個重要部分已經為很多的Windows程序員所熟悉,ODBC的工作依賴于數據庫制造商提供的驅動程序,使用ODBC API的時候,Windows的ODBC管理程序,把數據庫訪問的請求傳遞給正確的驅動程序,驅動程序再使用SQL語句指示DBMS完成數據庫訪問工作,因此,ODBC的存在為我們開發應用數據庫程序提供了非常強大的能力和靈活性。
<P><FONT color=#ffffff>----</FONT> 為了使ODBC能與數據庫一起工作,必須把數據庫注冊到ODBC驅動程序管理器,這項工作可以通過定義一個DSN或數據源名字來完成。通常,我們只能手動打開系統控制面板,運行其中的ODBC數據源管理器,手工配置數據源,但是這項工作對用戶而言過于復雜,我們必須考慮用程序替用戶完成這些配置工作。
<P><FONT color=#ffffff>----</FONT> 因此許多程序員在發布自己編寫的數據庫軟件時候都希望能有一個優秀的安裝程序能夠自動設置好ODBC數據源,雖然現在InstallShield等一些優秀的安裝制作軟件可以幫助我們實現此類功能,但畢竟缺少靈活,程序員不能完全控制它,事實上,我們完全可以自己編寫一些程序實現此類功能,實現的方法有幾種,一種辦法是用程序修改Windows注冊表,程序員可以用Windows API函數增改HKEY_LOCAL_MACHINE\Software\ODBC下的ODBC.INI中的鍵值,這種方法比較煩瑣。我現在推薦一種在程序中使用ODBC API的方法,程序員可以在任何時候都可以用Visual C++編寫的程序調用這些API函數來設置ODBC數據源。
<P><FONT color=#ffffff>----</FONT> 下面我用MFC寫一個程序來演示如何實現這個功能:
<P><FONT color=#ffffff>----</FONT> 首先,打開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這條注釋語句: <PRE> SQLConfigDataSource(NULL,ODBC_ADD
_SYS_DSN,"Microsoft Access Driver (*.mdb)\0","
DSN=TryDB\0DBQ=D:\\Database\try.mdb\0DEFAULTDIR=D:\\DATABASE\0\0");
'
</PRE><FONT color=#ffffff>----</FONT> 您可以根據您不同的設置需要修改上面的語句,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這個項目,會發現出現下面的錯誤: <PRE>tryDlg.obj : error LNK2001: unresolved
external symbol _SQLConfigDataSource@16
Debug/try.exe : fatal error LNK1120:
1 unresolved externals
</PRE><FONT color=#ffffff>----</FONT> 有些人可能因為找不出錯誤而放棄了,其實這是因為當我們使用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數據源管理器或注冊表查看運行結果,您會發現,您的數據庫已經成功的注冊了。 <br><br>
</DIV></div></div>
<script src='../../../get_readnum.asp?id=
6993
'></script>
</center></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -