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)
ift0then
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.sqlcode0then
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.sqlcode100ornewpassword=""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开发面向网络的和多媒体的“治理信息系统”。