摘要:比較了Delphi中應(yīng)用ODAC和BDE兩種方式連接Oracle的不同,介紹了基于ODAC方式的數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)方法,并給出了Delphi中應(yīng)用ODAC開發(fā)數(shù)據(jù)庫管理系統(tǒng)的幾個細節(jié)。
關(guān)鍵詞: ODAC ?BDE ?控件 ?Delphi
前言:隨著網(wǎng)絡(luò)知識的普及和數(shù)據(jù)庫技術(shù)的發(fā)展,如今的軟件編程技術(shù)已經(jīng)從單機版本向網(wǎng)絡(luò)化、對象化發(fā)展,網(wǎng)絡(luò)化編程技術(shù)是現(xiàn)代計算機技術(shù)的一個主要發(fā)展方向。應(yīng)用這項技術(shù),我們可以將現(xiàn)在油田中的一些應(yīng)用軟件移植到網(wǎng)絡(luò)上,這樣只要擁有可以上網(wǎng)的計算機,我們就能夠在任何時候、任何地方利用網(wǎng)絡(luò)上的任何應(yīng)用軟件進行工作,這將擴大我們的辦公空間。在油田生產(chǎn)中我們需要處理大量的數(shù)據(jù),而且我們大部分數(shù)據(jù)是共享的,因此在油田中開發(fā)出基于網(wǎng)絡(luò)的數(shù)據(jù)庫應(yīng)用軟件是我們軟件開發(fā)者的一個研究方向和軟件編制工作的重點。
一、BDE與ODAC的簡介
BDE(Borland Database Engine)數(shù)據(jù)庫引擎是Delphi數(shù)據(jù)庫應(yīng)用程序和數(shù)據(jù)資源的橋梁,BDE提供了一套簡單的統(tǒng)一的接口。因為應(yīng)用程序安裝時需要安裝BDE,所以應(yīng)用BDE方式存取數(shù)據(jù)時的安裝工作比較麻煩;在基于Oracle的客戶/服務(wù)器應(yīng)用程序中,使用BDE不能夠獲得服務(wù)器的特殊特征,不能使用更多的系統(tǒng)資源,降低數(shù)據(jù)處理速度、發(fā)布和管理程序繁瑣。
Oracle Data Access Components(ODAC)是存取Oracle數(shù)據(jù)庫的一組非可視化的組件。ODAC直接使用Oracle調(diào)用接口(OCI)。該接口以動態(tài)運行庫的方式提供一個標(biāo)準數(shù)據(jù)庫訪問和取回函數(shù)庫,它能夠被鏈接到應(yīng)用程序中。
二、ODAC數(shù)據(jù)存取組件的優(yōu)勢
* 直接訪問Oracle數(shù)據(jù),不需要分發(fā)、安裝和配置BDE和ODBC。
* 采用NET方式時,不需要安裝和管理 Oracle 客戶端軟件。
* 極高速的數(shù)據(jù)存取,高性能地控制拿取大數(shù)據(jù)塊。
* 自動化地更新數(shù)據(jù),自動化地數(shù)據(jù)鎖住和刷新。
* 編譯成的應(yīng)用程序非常小,將應(yīng)用程序安裝到其它計算機的過程非常簡單。
* 支持 Oracle的特殊特性: BLOB、CLOB 數(shù)據(jù)類型,對象,數(shù)組,引用,嵌套表。
三、技術(shù)實現(xiàn)
數(shù)據(jù)庫管理系統(tǒng)共包括數(shù)據(jù)瀏覽、存儲和打印三個模塊。在該系統(tǒng)中,我們采用的是ODAC的NET方式,這樣應(yīng)用程序可以直接通過TCP/IP協(xié)議來連接Oracle數(shù)據(jù)庫,而不需要安裝Oracle客戶端,使安裝工作更簡單。
1、數(shù)據(jù)瀏覽模塊
在該模塊中,我們將Oacle數(shù)據(jù)庫中的表、表的字段設(shè)計成可選的,用戶可根據(jù)自己的需要選擇要瀏覽的表及表中的字段;也可以自己輸入條件,選取表中部分數(shù)據(jù)。在該模塊中我們應(yīng)用的是TOraSession 和ToraQuery兩個控件,前者用來控制服務(wù)連接,后者用來執(zhí)行查詢,操作記錄集。
首先,要配置Oracle數(shù)據(jù)庫,要給出Oracle服務(wù)器的地址、偵聽端口號和數(shù)據(jù)庫名字。配置數(shù)據(jù)庫的語句如下:
Oras.ConnectString:=syn_u+'/'+syn_p+'@'+server_ip+'::'+db_str;
Oras.ConnectPrompt := False; ? ? ? Oras.Options.Net := True;
Oras.Connect;
查詢時,將SQL語句輸入到ToraQuery的SQL屬性中,將其session屬性設(shè)置為oras就可以連接數(shù)據(jù)庫執(zhí)行SQL語句對數(shù)據(jù)庫中的數(shù)據(jù)進行相應(yīng)的操作了。其使用方法如下:
if oraq_out.Active then ? ? ? oraq_out.Close;
oraq_out.Session:=oras; ? ? ? ?oraq_out.SQL.Clear;
oraq_out.SQL.Add(sqlstring); ? ? ? ?oraq_out.Open;
2、數(shù)據(jù)存儲模塊
該模塊分為兩個部分,一個是將Oracle數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)存為Dbase數(shù)據(jù)庫表,第二部分是將相同結(jié)構(gòu)的Dbase單機數(shù)據(jù)向Oracle的數(shù)據(jù)轉(zhuǎn)換。在將Oracle數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)存為Dbase數(shù)據(jù)庫表時,我們設(shè)計的也是表及表中字段可選。連接Dbase數(shù)據(jù)庫我們使用的Delphi中TTable控件。在這里,我們是動態(tài)的創(chuàng)建這個控件,動態(tài)的建立的Dbase數(shù)據(jù)庫表 。程序代碼如下:
tablec:=ttable.Create(self); ?tablec.Active:= false;
tablec.TableName:=tablename; ?tablec.TableType:=ttfoxpro;
tablec.DatabaseName:=tablepath; ?tablec.FieldDefs.Clear;
while not oraquery1.Eof do ? begin
if oraquery1.FindField('DATA_TYPE').AsString = 'CHAR' then
tablec.FieldDefs.Add ? ? ? ? ? ? ? ? (oraquery1.fieldbyname('COLUMN_NAME').asstring, ? ? ? ? ? ? ? ? ftstring,oraquery1.fieldbyname('DATA_LENGTH').asinteger, ? ? ? ? ? ? ?false) ? ? else if oraquery1.FindField('DATA_TYPE').AsString = 'NUMBER'
then ? ? ? ? ? ? ? ? ? ? ? ? BEGIN
…… ? ? ? ? ? ? ? ? ? ? ? ?END;
oraquery1.Next; ?end; ? tablec.CreateTable;
四、 結(jié)論
采用ODAC使得連接、操縱數(shù)據(jù)庫更加方便、容易,能夠適應(yīng)油田生產(chǎn)中處理大量數(shù)據(jù)的需要。應(yīng)用ODAC技術(shù)開發(fā)的數(shù)據(jù)庫應(yīng)用程序,與用戶之間具有良好的交互性,響應(yīng)迅速,能夠達到日常工作的基本要求。采用ODAC技術(shù)訪問數(shù)據(jù)庫能夠減輕數(shù)據(jù)庫服務(wù)器的負載,提高數(shù)據(jù)庫的執(zhí)行效率。ODAC技術(shù)在數(shù)字化油田中有著廣闊的應(yīng)用前景,為我們早日實現(xiàn)辦公網(wǎng)絡(luò)化提供了更為可靠的技術(shù)保障。
作者簡介:
賈麗杰 :女,1990年08月21日出生, 2012年畢業(yè)于黑龍江八一農(nóng)墾大學(xué)計算機科學(xué)與技術(shù)專業(yè),現(xiàn)在大慶油田第五采油廠信息中心信息情報室工作; Email:jlj@petrochina.com.cn黑龍江省大慶市郵編:163000