柴鎖柱 柴華
摘 要:在使用Delphi自帶的ADO組件開發(fā)Access數(shù)據(jù)庫應(yīng)用程序時,會遇到由于程序存放路徑不同導(dǎo)致數(shù)據(jù)庫不能正常連接,致使程序不能正常運行,此問題采用動態(tài)鏈接Access數(shù)據(jù)庫的方法可以解決;結(jié)合具體代碼闡述了用ADO組件動態(tài)鏈接Access加密數(shù)據(jù)庫的方法和關(guān)鍵技術(shù),使得應(yīng)用程序可以任何路徑都能正常運行。
關(guān)鍵詞:Delphi;數(shù)據(jù)庫;Access;ADO組件
DOI:10.16640/j.cnki.37-1222/t.2018.24.100
1 引言
數(shù)據(jù)庫已被廣泛應(yīng)用在各種管理系統(tǒng)中,例如用在倉房糧溫監(jiān)控系統(tǒng)中已得到應(yīng)用[1]。數(shù)據(jù)庫系統(tǒng)的種類很多,大型數(shù)據(jù)庫如MSSQL Sever、Oracle,小型數(shù)據(jù)庫如Access,在應(yīng)用中應(yīng)根據(jù)需要選擇合適的數(shù)據(jù)庫。開發(fā)數(shù)據(jù)庫應(yīng)用程序的工具有很多,如VB、VC和Delphi等,其中Delphi是由Borland公司推出的可視化集成開發(fā)環(huán)境,是一種方便、快捷的Windows應(yīng)用程序開發(fā)工具,具有簡單、高效和功能強大的特點,采用基于窗體和面向?qū)ο蟪绦蛟O(shè)計的方法,具有強大的數(shù)據(jù)庫支持,用組件庫封裝了豐富的Windows操作,適合開發(fā)數(shù)據(jù)庫方面的應(yīng)用程序,支持多種數(shù)據(jù)庫結(jié)構(gòu),從客戶機/服務(wù)器模式到多層數(shù)據(jù)庫結(jié)構(gòu)模式,先進的數(shù)據(jù)庫引擎,高效的數(shù)據(jù)分析手段和提供大量的企業(yè)組件,采用Delphi開發(fā)數(shù)據(jù)庫應(yīng)用程序成為許多程序員的選擇。在應(yīng)用程序開發(fā)過程中,使用TADOConnection組件連接已經(jīng)設(shè)計好的Access數(shù)據(jù)庫既方便又快捷,但是會遇到一些問題:(1)一般在編程時TADOConnection組件的ConnectionString屬性已經(jīng)確定,當將程序移植到其它計算機運行時,由于環(huán)境的改變會導(dǎo)致程序無法正常運行;(2)用戶可以通過Mircosoft Access軟件直接操作數(shù)據(jù)庫,這可能造成數(shù)據(jù)庫的破壞。為了解決第二個問題,需要對數(shù)據(jù)庫加密;為了解決第一個問題,應(yīng)用程序需要動態(tài)修改TADOConnection組件的ConnectionString屬性,對加密的數(shù)據(jù)庫進行連接。以Access數(shù)據(jù)庫為例,闡述使用Delphi的ADO組件開發(fā)數(shù)據(jù)庫應(yīng)用程序的方法、步驟和關(guān)鍵問題,以完成對數(shù)據(jù)庫的訪問和操作。
2 ADO組件
ADO(ActiveX Data Object)是微軟公司推出的一套數(shù)據(jù)庫訪問規(guī)范。它使應(yīng)用程序能夠通過一種稱為OLE DB提供者(OLE DB Provider)的驅(qū)動程序訪問和操作數(shù)據(jù)庫。而OLE DB 是一個基于COM的數(shù)據(jù)庫訪問規(guī)則和API函數(shù)的集合,并經(jīng)過了簡化。ADO以ActiveX的形式封裝了OLE DB,以提供一個更加友好方便的使用方式。使用ADO的好處,一是速度快,占用內(nèi)存少,因為它直接使用API函數(shù);二是支持基于Web應(yīng)用開發(fā);三是支持RDS(Remote Data Service),即首先將數(shù)據(jù)從服務(wù)器移動到客戶端或Web頁上,等到在客戶端或Web頁上將數(shù)據(jù)修改后,再將數(shù)據(jù)回傳到服務(wù)器上。Delphi 7開發(fā)工具自帶ADO組件[2],為連接多種數(shù)據(jù)庫提供了方便快捷的方法,這些組件可以分為兩大類:連接類型和訪問類型。ADO連接組件TADOConnection屬于連接類型,用來建立一個數(shù)據(jù)庫連接,為訪問類型的ADO組件提供數(shù)據(jù)庫連接,修改TADOConnection組件的ConnectionString屬性可以連接不同的數(shù)據(jù)庫。這樣ADO數(shù)據(jù)集組件就可以通過ADO連接組件訪問數(shù)據(jù)庫中的數(shù)據(jù)表。
3 用ADO組件連接Access數(shù)據(jù)庫
結(jié)合具體代碼闡述使用ADO組件連接并訪問加密Access數(shù)據(jù)庫的方法步驟及關(guān)鍵技術(shù)要點。
(1)創(chuàng)建一個文件夾,命名為“project”,用來存放項目的源代碼;在“project” 文件夾下創(chuàng)建子文件夾,命名為“DataBase”,用于存放Access數(shù)據(jù)庫。
(2)用Access創(chuàng)建一個數(shù)據(jù)庫,命名為“db1.mdb”,保存在DataBase文件夾中;對db1.mdb數(shù)據(jù)庫加密,假設(shè)密碼為“123456”,創(chuàng)建數(shù)據(jù)表,命名為“Table1”,為數(shù)據(jù)表添加字段并添加數(shù)據(jù),不再贅述。
(3)打開Delphi集成開發(fā)環(huán)境,創(chuàng)建一個工程保存在project文件夾下,項目命名為“project1”;新建窗體命名為“Form1”。
(4)在窗體Form1上添加TADOConnection組件,命名為“ADOConnection1
”,TADOConnection組件為Delphi自帶的組件,用于連接數(shù)據(jù)庫。需要修改TADOConnection組件的ConnectionString屬性,以指定需要連接的數(shù)據(jù)庫。 ADOConnection1的LoginPrompt屬性設(shè)置為“False”,使得程序運行時不再出現(xiàn)數(shù)據(jù)庫登錄窗口。因為ConnectionString屬性需要在程序運行過程中設(shè)置,所以ADOConnection1的Connected屬性設(shè)置為“False”。
(5)在窗體Form1上添加TADOQuery組件,命名為“ADOQuery1”
,TADOQuery組件為Delphi自帶的組件,用來訪問數(shù)據(jù)表,為TDataSource組件提供數(shù)據(jù)集。需要修改ADOQuery1的SQL屬性以訪問數(shù)據(jù)庫中的數(shù)據(jù)表,修改ADOQuery1的Connection屬性以連接數(shù)據(jù)庫。因為還沒有連接數(shù)據(jù)庫,所以ADOQuery1的Active屬性設(shè)置為“False”。ADOQuery1的SQL屬性設(shè)置為“select * from table1”。ADOQuery1的Connection屬性設(shè)置為“ADOConnection1”。
(6)在窗體Form1上添加TDataSource組件,命名為“DataSource1”
,TDataSource組件為Delphi自帶的組件,為DBGrid1提供數(shù)據(jù)源。需要修改DataSource1的DateSet屬性。DataSource1的DateSet屬性設(shè)置為“ADOQuery1”。
(7)在窗體Form1上添加TDBGrid組件,命名為“DBGrid1”,TDBGrid組件為Delphi自帶的組件,用于顯示數(shù)據(jù)。需要修改DBGrid1的DataSource屬性,設(shè)置為DataSource1。
(9)編譯并運行應(yīng)用程序,可以正常訪問數(shù)據(jù)庫顯示數(shù)據(jù)表的記錄信息。
(10)將project1.exe文件和DataBase文件夾一起復(fù)制,粘貼到另外機器的任何一個文件夾下測試,能夠正常運行。
4 關(guān)鍵技術(shù)問題
(1)創(chuàng)建Access數(shù)據(jù)庫后設(shè)置密碼,可以防止用戶Access軟件打開數(shù)據(jù)庫文件,避免了因用戶使用Access軟件直接修改數(shù)據(jù)庫而造成數(shù)據(jù)被損壞的情況發(fā)生。
(2)使用程序代碼修改ADOConnection1組件的ConnectionString屬性,主要是采用相對路徑訪問數(shù)據(jù)庫,指定數(shù)據(jù)庫訪問的密碼。為了使開發(fā)的應(yīng)用程序能夠在不同機器不同路徑下都能運行,對數(shù)據(jù)庫進行訪問可以采用相對路徑的方法,程序代碼參見'DataBase\db1.mdb;'這一部分。
5 結(jié)束語
實踐證明,在Delphi 中使用ADO組件開發(fā)Access數(shù)據(jù)庫應(yīng)用程序,給Access數(shù)據(jù)庫加密,可以有效防止用戶直接通過Access軟件修改修據(jù)庫而造成數(shù)據(jù)庫損壞;動態(tài)修改ADOConnection1組件的ConnectionString屬性,以實現(xiàn)動態(tài)連接數(shù)據(jù)庫,使應(yīng)用程序可以在不同環(huán)境下運行。串口通信程序,在Delphi 7中使用ADO組件開發(fā)Access數(shù)據(jù)庫應(yīng)用程序,具有簡單方便、開發(fā)效率高的特點,結(jié)合Delphi的第三方組件CPort串口組件已經(jīng)在綜合項目的開發(fā)中得到應(yīng)用[3],應(yīng)用效果令人滿意。在Delphi 中利用ADO組件開發(fā)Access數(shù)據(jù)庫應(yīng)用程序的方法,對開發(fā)Delphi應(yīng)用程序?qū)嵺`具有一定的指導(dǎo)意義。
參考文獻:
[1]柴鎖柱.基于RS485的倉房糧溫監(jiān)控網(wǎng)絡(luò)通信系統(tǒng)[J].滄州師范學院學報,2014,30(01):69-72.
[2]張大年,廖智勇,劉劍鋒.Delphi數(shù)據(jù)庫應(yīng)用開發(fā)技術(shù)與實例[M].2002(01):428-472.
[3]柴鎖柱,柴華.在Delphi中用CPort組件開發(fā)串口通信程序[J].內(nèi)江科技,2015(05):49-50.
作者簡介:柴鎖柱(1963-),男,河北滄州人,本科,教授,研究方向:嵌入式系統(tǒng)和計算機控制技術(shù)。