幾種注冊ODBC數(shù)據(jù)源的方法
ODBC(Open Database Connectivity,開放式數(shù)據(jù)庫互連)是一種應用程序接口 (API) 規(guī)范。它定義了一個標準例程集,使用它們應用程序可訪問數(shù)據(jù)源中的數(shù)據(jù)。應用程序通過引用 API 的函數(shù)可以直接使用 ODBC,或利用數(shù)據(jù)訪問對象 (DAO) 或遠程數(shù)據(jù)對象 (RDO) 來使用ODBC。但是,在實現(xiàn)ODBC時,我們必須首先配置ODBC環(huán)境,進行數(shù)據(jù)源的注冊,這樣才能在對數(shù)據(jù)庫進行編程時,對數(shù)據(jù)源進行連接、訪問和操作。本文介紹幾種常用的注冊ODBC數(shù)據(jù)源的方法。
手工配置
1.ODBC數(shù)據(jù)源管理器
在進行數(shù)據(jù)庫開發(fā)時,為了達到配置ODBC,進行DSN定義注冊的目的,微軟給出了一個手工操作的解決方法。在Windows 9X操作系統(tǒng)的控制面板中,有一個名為“ODBC數(shù)據(jù)源(32位)”的圖標,可以通過它激活專門為用戶設置ODBC環(huán)境的程序(ODBC Data Source Administrator,ODBC數(shù)據(jù)源管理器)。在Windows 2000操作系統(tǒng)中,上述圖標被放置在控制面板的“管理工具”里面。
這個用于設置ODBC環(huán)境的程序叫做桌面驅動程序,它支持數(shù)種DBMS(Database Management System,數(shù)據(jù)庫管理系統(tǒng))。當用戶想增加一個數(shù)據(jù)源和一個所需要的驅動程序時,可以通過ODBC數(shù)據(jù)源管理器的配置對話框配置特定類型的數(shù)據(jù)庫。大多數(shù)情況下,在編寫對數(shù)據(jù)庫操作的程序時,我們至少需要知道諸如數(shù)據(jù)庫文件名、系統(tǒng)(本地或遠程)、文件夾等信息,同時要給數(shù)據(jù)源命名。
2.定義數(shù)據(jù)源的類型
用戶可以定義以下三種類型的數(shù)據(jù)源:
用戶數(shù)據(jù)源:作為位于計算機本地的用戶數(shù)據(jù)源而創(chuàng)建的,并且只能被創(chuàng)建這個數(shù)據(jù)源的用戶所使用;
系統(tǒng)數(shù)據(jù)源:作為屬于計算機或系統(tǒng)而不是特定用戶的系統(tǒng)數(shù)據(jù)源而創(chuàng)建的,用戶必須有訪問權才能使用;
文件數(shù)據(jù)源:指定到文件中作為文件數(shù)據(jù)源而定義的,任何已經(jīng)正確地安裝了驅動程序的用戶皆可以使用這種數(shù)據(jù)源。
3.數(shù)據(jù)源注冊的步驟
以Microsoft Access為例,如果在C:\myfile\文件夾里創(chuàng)建了一個名為myexample.mdb的數(shù)據(jù)庫文件,其注冊步驟如下:
在控制面板里找到“ODBC數(shù)據(jù)源”圖標,打開數(shù)據(jù)源管理器的交互界面;
筆者創(chuàng)建的數(shù)據(jù)庫文件是供本機上的用戶使用的,所以這里選擇“用戶 DSN”;
然后按下“添加”按鈕,在彈出的數(shù)據(jù)源管理器對話框里,為自己所要創(chuàng)建的數(shù)據(jù)源選擇一個驅動程序,本文的數(shù)據(jù)庫文件是用Microsoft Access創(chuàng)建的,所以要選擇“Microsoft Access Driver (*.mdb)”;
按“完成”按鈕后,進入一個標題為“ODBC Microsoft Access 安裝”的界面,在其中設置“數(shù)據(jù)源名”為“mydatasource”,選取數(shù)據(jù)庫文件 “C:\myfile\myexample.mdb”,然后確定即可。
這樣我們就完成了一個簡單的ODBC數(shù)據(jù)源的注冊。當然,在以上的步驟中,用戶可以根據(jù)自己的不同需要,設置不同的選項。
注冊結束后,我們便可以在對數(shù)據(jù)庫的編程中,操作該數(shù)據(jù)庫了。
在VB中注冊數(shù)據(jù)源
在VB中對數(shù)據(jù)庫進行編程時,可以利用RegisterDataSource方法為ODBC數(shù)據(jù)源輸入連接信息到 Windows 注冊表中。它的語法是:
RegisterDataSource DSN, driver, silent, attributes
其中參數(shù)代表的含義分別為:
DSN:字符串表達式,它是在引用數(shù)據(jù)源描述信息塊時所使用的名字。例如,如果數(shù)據(jù)源是一個ODBC遠程數(shù)據(jù)庫,這就是服務器的名字;如果是用戶DSN,則是注冊的數(shù)據(jù)源的名字。
drive:字符串表達式,表示ODBC驅動程序的名稱。它并不是 ODBC 驅動程序動態(tài)連接庫 (DLL) 文件名。例如,SQL Server 是驅動程序名,而 SQLSRVR.DLL 是 DLL 文件名。必須安裝ODBC 及相應的驅動程序。
silent:布爾類型值,如果不想顯示 ODBC 驅動程序對話框,用以提示指定驅動程序的信息,該值就為 True;如果希望顯示 ODBC 驅動程序對話框,該值就為 False。如果 silent 為 True,那么attributes必須包含所有必需的指定驅動程序的信息。
attributes:字符串表達式,它是一個要添加到 ODBC.INI 文件中的關鍵字列表。編寫程序時,可以根據(jù)需要選擇若干attributes的參數(shù)進行設置。
例如:我們可以編寫如下的VB程序,達到與上面手工注冊一樣的目的。程序清單如下:
Sub RegisterDataSource()
Dim strAttribs As String
’建造關鍵字字符串。
’C:\myfile\myexample.l.mdb數(shù)據(jù)庫文件名(包含路徑)
strAttribs =“DBQ=” _
& “C:\myfile\myexample.mdb” _
& Chr$(13) & “OemToAnsi=No” _
& Chr$(13) & “SERVER=SEQUEL” _
& Chr$(13) & “Network=DBNMPNTW” _
& Chr$(13) & “Database=WorkDB”_
& Chr$(13) &“Address=\\SEQUEL\PIPE\SQL\QUERY”
’建立新的注冊的 DSN。
rdoEngine.rdoRegisterDataSource “mydatasource”,
“Microsoft Access Driver (*.mdb)”, True,
strAttribs
End Sub
Private Sub Form_Load()
Call rdoRegisterDataSource
End Sub
注意:為了在代碼中使用rdoEngine和遠程數(shù)據(jù)對象,必須先在“引用"對話框中設置一個到 Microsoft Remote Data Object 2.0 對象庫的引用,否則在第一次引用rdoEngine 對象時會導致編譯錯誤。
利用注冊表合并
1.解決思路
考查ODBC數(shù)據(jù)源注冊后對Windows注冊表的修改情況,我們可以發(fā)現(xiàn)所注冊的數(shù)據(jù)源對Windows注冊表的影響關鍵集中在[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI]里。
這樣,我們導出[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI],每次以之為模板,把所要注冊的數(shù)據(jù)源信息加入到注冊表導出文件的對應位置,然后再將該文件與系統(tǒng)注冊表合并即可。
2.具體操作
首先,我們要弄清楚Regedit 及其參數(shù)的含義。Regedit是打開系統(tǒng)注冊表的命令。在“開始\運行\(zhòng)”中輸入即可。它的三個參數(shù)含義如下:
Regedit /e myfile.reg :表示把注冊表文件導出到myfile.reg 文件中,相當于復制整個注冊表文件到myfile.reg中;
Regedit /c myfile.reg:表示把myfile.reg導入注冊表,相當于用該文件的內(nèi)容覆蓋了注冊表的內(nèi)容;
Regedit /s myfile.reg :表示把myfile.reg文件的內(nèi)容與注冊表文件的內(nèi)容進行合并。
我們只需在注冊表中將有用的部分導出,而后將所要注冊的數(shù)據(jù)源的信息加入,再與系統(tǒng)注冊表合并就可以了。這個合并的過程,我們既可以手工輸入來實現(xiàn),也可以通過編程實現(xiàn)自動合并。
注意:為了防止誤操作,一定要將系統(tǒng)注冊表作一次備份。
小 結
從安全的角度考慮,筆者首推利用在Windows控制面板中的ODBC數(shù)據(jù)源管理工具來進行數(shù)據(jù)源注冊,以免因對注冊表的不熟或疏忽造成不必要的損失。當然,還有一些應用工具,可以實現(xiàn)對ODBC數(shù)據(jù)源的注冊,用戶可以根據(jù)不同的需求選擇使用。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |