当前位置导航:炫浪网>>网络学院>>编程开发>>Oracle教程

开发基于Oracle7数据库的管理信息系统


  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开发面向网络的和多媒体的“管理信息系统”。
相关内容
赞助商链接