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