1前言
開發高水平的“治理信息系統”,選擇性能優越的數據庫是最重要的一環,我們經過多方面的調研和分析,選擇了Oracle7數據庫,成功地開發了本系統。實踐證實,本系統設計科學、合理、運行穩定,本文將具體闡述一下系統中應用ORACLE7數據庫的方法和技術。
2系統的開發、運行環境
本系統在CLIENT/SERVER結構上運行,SERVER為CDC4360小型機,和快速FDDI環網相接,內裝有UNIX操作系統和ORACLE7數據庫,系統總體網絡協議為TCP/ip。
CLIENT端為486以上微機,16M以上內存,硬盤足夠大,通過HUB、路由器、MODEM和SERVER連接。開發、運行平臺是WIN95,安裝了網絡軟件ONNET、ORACLECDE產品SQL*NETV2。開發工具是POWERBULDER5.0(以下簡稱PB5)、VB4等。
3 ORACLE7在系統中的各種應用
3.1一般性的數據治理
一般性的數據治理用數據窗口治理最方便,可以在數據窗口中進行表的增、刪、改、查詢等操作,下邊是一些具體例子(PB5):
3.1.1連通ORACLE庫,并將數據裝入數據窗口:
dw_1.SetTransObject(sqlca)
dw_1.Retrieve()
3.1.2增加一條記錄
dw_1.InsertRow(dw_1.GetRow()+1)
3.1.3刪除一條記錄(當前記錄)
dw_1.DeleteRow(0)
3.1.4將數據提交入庫(存盤)
dw_1.Update()
commit;
3.1.5打印數據窗口(表)中的數據
dw_1.PRint()
3.2文字類數據治理
3.2.1文本入庫和查詢
文本入庫和查詢可采用PB5的MLE(多行編輯器)作界面,編輯完成后存入ORACLE7的LONG字段中,查詢時從LONG字段中取出,放入MLE中查詢,下邊是一個例子:
//文本的預處理(以去除文本文件中的回車換行符為例說明)
//將文件讀入BLOB型變量
text中fn=fileopen(txtname,streammode!)
iffn<>-1then
fileread(fn,text)
fileclose(fn)
//并轉換為文本
article=string(text)
s=len(article)
forv=1tos
t=pos(article,char(13)+char(10),v)
ift>0then
article=replace(article,t,2,"")
else
endif
next
mle_1.text=article
//將處理后的文件c:/bb.txt存盤,
文件中的回車換行符已全部去掉
text1=blob(article)
filname="c:/bb.txt"
fn=fileopen(filname,streammode!,
write!,lockwrite!,replace!)
iffn<>-1then
filewrite(fn,text1)
fileclose(fn)
endif
//文本入庫
nr1=blob(mle_1.text)
updateblobgljwjsetnr=:nr1wherebh=:pass_parm
andzwrq=:fsjandwjbs=:fl5usingsqlca;
commit;
//放入MLE中查詢
selectblobnrinto:nr1fromgljwjwherebh=:pass_parm
andwjbs=:fl5andzwrq=:fsjusingsqlca;
mle_1.text=blob(nr1)
3.2.2從庫中重新生成文本文件filename.txt并存盤
selectnrinto:filenfromfwgswherebh=:bh1
andlwrq=:zwrq1usingsqlca;
fname="c:/filename.txt"
fh=fileopen(fname,streammode!,write!,lockwrite!,replace!)
iffh<>-1then
filewrite(fh,filen)
fileclose(fh)
endif
3.3處理圖象文件(大的二進制文件)
圖象文件(一般為BMP位圖文件)是二進制文件,將其以數據流方式存入ORACLE7的LONG字段中,查詢時從LONG字段中取出,放入圖象框(如p_1)中查詢,下邊是一個例子:
//將圖象文件讀入BLOB型變量pict中
fn=fileopen(picname,streammode!)
iffn<>-1then
fileread(fn,pict)
fileclose(fn)
//將圖象放入圖象框p_1內查看
setpicture(p_1,pict)
endif
//將圖象存入表pic的LONG字段bmpt中
updateblobpicsetbmpt=:pict;
commit;
較大的圖象文件一次不能入庫,可采取分割圖形的方式,分塊存入,因為LONG字段所存放的數據大小一般是沒限制的(可存放2G的內容)。
4開發應用經驗
4.1建議CLIENT端通過SQL*NETV2進行ORACLE數據通信(不用SQL*NETTCPV1產品)
因為在ORACLE7推出以后,SQL*NETV1就沒有做一些改進工作,繼續支持到ORACLE7.2,ORACLE7.3以后的產品將不支持SQL*NETTCPV1,所以,ORACLE7用戶應立即改用SQL*NETV2,不然會影響到庫的運行穩定性。
ORACLECDE2和Developer2000提供了CLIENT端ORACLE產品的安裝程序ORAINST.EXE,運行該文件來安裝SQL*NETV2,選擇的產品有:
aORACLETCP/IPADPTER2.1.4.1.3
bsql*net2.1.4.1.4
在WIN95下,網絡軟件產品(Tcp/IPVendor)選擇MicrosoftwindowsNTTcp/IP3.1,按提示說明裝入就可以了,另外還要做以下工作:
將SERVER上的tnsnames.ora文件復制到CLIENT端c:/orawin/network/admin目錄下:
ora7=(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=111.1.1.1)
(PORT=1521)
)
(CONNECT_DATA=(SID=ora7))
)
可在SQLPLUS下鍵入連接命令scott/tiger@ora7測試連接情況。
首先要作好這三件工作:
4.2采取數據加密技術
對用戶來說,查詢信息是有權限的,若想查詢某項保密數據,需正確地鍵入密碼,才能查到。面對同一臺微機,誰能正確地鍵入密碼,誰就能做查詢,該系統通過自定義一些復雜的函數運算產生密碼,從表(TABLE)中找不到密碼數據,通過這種精密的設計處理,達到了數據保密要求。下邊是密碼修改和識別的一段程序(PB5):
passWord=sle_1.text
a8=pos(sle_1.text,"/")
ifa8>=1then
password=left(sle_1.text,a8-1)
newpassword=mid(sle_1.text,a8+1,len(sle_1.text)-a8)
endif
selectdwbminto:dmfromdwwheremm=:password;
sle_1.text=""
ifsqlca.sqlcode<>0then
messagebox("警告:","口令錯!")
pw=pw+1
ifpw>=3then
close(w_bg_main)
endif
else
mm=dm
ifa8>=1then
a7=messagebox("提示信息","確定要修改口令嗎(y/n)?
",information!,YesNo!,2)
ifa7=1then
selectdwbminto:a9fromdwwheremm=:newpassword;
ifsqlca.sqlcode<>100ornewpassword=""then
messagebox("提示信息","新口令錯!")
gotoend1
else
updatedwsetmm=:newpassword
wheremm=:password;
messagebox("請記住新口令",string(newpassword))
commit;
endif
endif
endif
4.3用Excel輸出精美表格
用VC或PB5將ORACLE庫中的數據生成文本或EXCEL文件,再通過EXCEL的數據鏈接,將對應數據調入事先定義好的EXCEL標準輸出表中,按用戶的要求輸出。
PB5生成EXCEL格式文件的SCRIPT語句舉例如下:
dw_1.SaveAs("c:/glxx.xls",excel!,true)
4.4正確使用日期型數據
在庫操作過程中,若日期變量的值定義錯了,將提示SQL語句出錯信息,錯誤現象非常隱蔽,不好察覺,這是編程過程中的常見錯誤,在此非凡強調一下。舉一個例子:
若日期數據為常量,要按下列格式賦值(用一update語句說明):
updatetabsetrq='1-Feb-96';
commit;
5結束語
該系統的開發和應用,使我們更加體會到了ORACLE數據庫的優越性,本系統的開發成功與此是分不開的,我們將做進一步探索,用先進的開發工具和升級的ORACLE8開發面向網絡的和多媒體的“治理信息系統”。