- 相關(guān)推薦
Delphi 5 數(shù)據(jù)庫(kù)應(yīng)用中ODBC數(shù)據(jù)源的自動(dòng)管理
蔣冠雄 徐騁飛
(紹興文理學(xué)院實(shí)驗(yàn)中心)
摘要:本文分析了ODBC數(shù)據(jù)源設(shè)置的原理以及ODBC數(shù)據(jù)源和Delphi數(shù)據(jù)庫(kù)別名的關(guān)系。并在此基礎(chǔ)上,介紹了在Delphi5數(shù)據(jù)庫(kù)應(yīng)用程序安裝、運(yùn)行中,如何編程實(shí)現(xiàn)ODBC數(shù)據(jù)源和Delphi數(shù)據(jù)庫(kù)別名的設(shè)置。
關(guān)鍵字:Delphi、數(shù)據(jù)庫(kù)、ODBC
一、前言
Delphi的特色之一就是方便而強(qiáng)大的開發(fā)數(shù)據(jù)庫(kù)的能力,只要輕擊幾下鼠標(biāo),填寫極少的幾行代碼,就能快速地開發(fā)出很有風(fēng)格的數(shù)據(jù)庫(kù)應(yīng)用程序。編寫一個(gè)數(shù)據(jù)應(yīng)用可以很簡(jiǎn)單,但要在別人的計(jì)算機(jī)上運(yùn)行自己的應(yīng)用卻要費(fèi)一些周折。
首先,如果對(duì)方的計(jì)算機(jī)上還沒(méi)有安裝過(guò)Inprise公司的BDE數(shù)據(jù)庫(kù)引擎的話,那么就必須把BDE和應(yīng)用程序一起安裝到對(duì)方的計(jì)算機(jī)中。其次,應(yīng)用程序中用到的數(shù)據(jù)庫(kù)別名(Alias),特別是使用了ODBC數(shù)據(jù)源連接的數(shù)據(jù)庫(kù)別名必須和BDE一起設(shè)置。最后,如果應(yīng)用程序使用的數(shù)據(jù)庫(kù),其存放路徑并不是固定的,那么必須根據(jù)實(shí)際情況進(jìn)行ODBC和Alias的調(diào)整。這些,當(dāng)然可以在應(yīng)用程序安裝后,利用控制面板中ODBC數(shù)據(jù)源管理和BDE隨帶的BDE Administrator通過(guò)手工設(shè)置。但如此一來(lái),一方面會(huì)使應(yīng)用程序大打折扣,另一方面不便于普通用戶自己的安裝和今后工作路徑的改動(dòng)。
和Delphi一起發(fā)布的Install Shield Express可以大大簡(jiǎn)化安裝程序的制作,幫助我們完成許多工作。本文將要介紹的,便是如何通過(guò)Install Shield和應(yīng)用程序配合,完成安裝和運(yùn)行時(shí)的ODBC數(shù)據(jù)源的自動(dòng)設(shè)置。
二、原理
1、ODBC數(shù)據(jù)源
ODBC(Open DataBase Conectivity)是微軟公司制定的標(biāo)準(zhǔn)編程接口,只要有相應(yīng)的ODBC驅(qū)動(dòng)程序,就可以通過(guò)ODBC連結(jié)操作各種不同的數(shù)據(jù)庫(kù)。通常通過(guò)控制面板中的ODBC Data Source來(lái)配置ODBC的數(shù)據(jù)源。所謂ODBC數(shù)據(jù)源就是命名的一組信息,包括需要連結(jié)的數(shù)據(jù)庫(kù)所在位置(可以是磁盤目錄/文件,也可以是網(wǎng)絡(luò)服務(wù)器)、對(duì)應(yīng)的ODBC驅(qū)動(dòng)程序以及訪問(wèn)數(shù)據(jù)庫(kù)所需的其他相關(guān)信息,用戶可以通過(guò)數(shù)據(jù)源的名稱(DSNs,Data Source Names)來(lái)指定所需的ODBC連接。
DSNs按照其保存方式和作用范圍分為三種:用戶DSN、系統(tǒng)DSN和文件DSN。每個(gè)文件DSN保存在單獨(dú)的一個(gè)文件中,文件可以在網(wǎng)絡(luò)范圍內(nèi)共享;用戶DSN保存在注冊(cè)表中,只對(duì)當(dāng)前用戶可見(jiàn);系統(tǒng)DSN頁(yè)保存在注冊(cè)表中,但對(duì)系統(tǒng)中的所有用戶可見(jiàn)。用戶DSN和系統(tǒng)DSN的區(qū)別在于,用戶DSN保存在注冊(cè)表的HKEY_CURRENT_USER下,而系統(tǒng)DSN保存在HKEY_LOCAL_MACHINE下。
下面,以系統(tǒng)DSN為例說(shuō)明如何通過(guò)修改注冊(cè)表直接設(shè)置ODBC數(shù)據(jù)源。假定我們要連接的數(shù)據(jù)庫(kù)是Access97的c:\test\auto.mdb(注意:用較新的ADO連接Access數(shù)據(jù)庫(kù)效率更高,這里只是作為一個(gè)例子),數(shù)據(jù)源的名稱為CenterAuto,那么可以分為兩個(gè)步驟:
(1)注冊(cè)DSN本身的信息:
- 在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI下添加主鍵CenterAuto。主鍵的名稱CenterAuto就是數(shù)據(jù)源的名稱。
- 向CenterAuto添加鍵值,關(guān)鍵的幾項(xiàng)是
鍵值名
鍵值類型
鍵值
含義
Driver
字符串(String)
C:\WINDOWS\SYSTEM\ODBCJT32.DLL
ODBC驅(qū)動(dòng)程序DLL
DBQ
字符串(string)
c:\test\auto.mdb
連接的數(shù)據(jù)庫(kù)
DriverID
雙字(Dword)
19H(十六進(jìn)制數(shù))
FIL
字符串(string)
MS Access;
- 在CenterAuto下添加主鍵Engines
- 在Engines下添加主鍵Jet
- 在Jet下添加鍵值,要是一些配置信息,例如
ImplicitCommitSync、MaxBufferSize、PageTimeout、Threads。
關(guān)于不同的ODBC數(shù)據(jù)源的具體設(shè)置,可以查閱有關(guān)書籍,不過(guò)最簡(jiǎn)單的方法是在控制面板中設(shè)置相應(yīng)的數(shù)據(jù)源,然后用Regedit(98中)或Regedit32(NT中)察看一下注冊(cè)表。
(2)登記數(shù)據(jù)源:在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources下添加鍵值名CenterAuto,類型為字符串,鍵值為“Microsoft Access Driver (*.mdb)”。其中鍵值名指出了DSN,必須和前面的對(duì)應(yīng)起來(lái);鍵值則指出了ODBC驅(qū)動(dòng)程序的名稱,必須是已安裝了的。
2、BDE別名
Delphi 5.0通過(guò)BDE實(shí)現(xiàn)數(shù)據(jù)庫(kù)的操作。在連結(jié)數(shù)據(jù)庫(kù)時(shí),可以直接指出數(shù)據(jù)庫(kù)的存放路徑,也可以通過(guò)指定別名實(shí)現(xiàn),但前者只能實(shí)現(xiàn)對(duì)文件型數(shù)據(jù)庫(kù)的連接,如果要連接服務(wù)器上的數(shù)據(jù)庫(kù)或ODBC數(shù)據(jù)源,則必須通過(guò)別名。
BDE的別名可以用隨帶的Database Desktop中Alias Manager進(jìn)行管理,也可以在控制面板中用BDE Administrator管理,應(yīng)用程序運(yùn)行過(guò)程中還可以通過(guò)Session不可見(jiàn)控件實(shí)現(xiàn)動(dòng)態(tài)管理。不過(guò),對(duì)于ODBC數(shù)據(jù)源,一旦建立了用戶DSN或系統(tǒng)DSN,那么BDE就會(huì)自動(dòng)建立一個(gè)別名,別名的名稱和DSN的名稱是一樣的。同樣的,如果你刪除了DSN,那么BDE就會(huì)刪除相應(yīng)的別名。這就是說(shuō),在Delphi 5.0中操作ODBC數(shù)據(jù)源,只需要關(guān)心DSN的設(shè)置就可以了。
3、Install Shield
Delphi 5.0附帶的Install Shield不帶能夠完成BDE的安裝工作,而且完全支持安裝程序?qū)ψ?cè)表的修改,只要簡(jiǎn)單地在Make Registry Changes選項(xiàng)下,輸入需要添加的注冊(cè)表項(xiàng)目,就可以實(shí)現(xiàn)在應(yīng)用程序安裝時(shí)修改注冊(cè)表的目的。結(jié)合前面介紹的ODBC數(shù)據(jù)源的設(shè)置原理,利用這個(gè)功能,就可以方便地實(shí)現(xiàn)在安裝時(shí)進(jìn)行DSN的初始設(shè)置。
4、Delphi 5.0的注冊(cè)表控件
Delphi的TRegistry提供了操作Windows注冊(cè)表的界面,可以在程序中讀寫注冊(cè)表中的數(shù)據(jù)。如果不使用InstallShield,通過(guò)TRegistry也可以完成DSN的初始設(shè)置。本文僅介紹利用TRegistry實(shí)現(xiàn)對(duì)DSN的修改,而不介紹DSN的完整設(shè)置,但根據(jù)上述原理和下面的程序代碼,要做到這一點(diǎn)不會(huì)有任何問(wèn)題。
【Delphi 5 數(shù)據(jù)庫(kù)應(yīng)用中ODBC數(shù)據(jù)源的自動(dòng)管理】相關(guān)文章:
在Delphi中巧用Windows 的API函數(shù)08-06
PLC在自動(dòng)磨花機(jī)中的應(yīng)用08-06
Delphi拖放編程08-06
任務(wù)驅(qū)動(dòng)教學(xué)法在數(shù)據(jù)庫(kù)教學(xué)中的應(yīng)用08-27
Delphi 中動(dòng)態(tài)鏈接庫(kù)(DLL)的建立和使用08-06