当前位置:首页>> PowerBuilder>> PB高级编程

全文搜索

精华导读

·EasyERP2004 制造行业通用性ERP管理系统
·PB中表的修改对数据窗口和报表的影响的解决办法
·在PB中实现Word内容的替换
·office xp风格菜单基本版
·用PB制作outlook界面源程序(非原来的老外版本)(
·将所见dw内容(包括计算字段)输出到execl中
·ERP在中国应用面临的问题
·PB中使用FORMULA ONE(实例篇
·控制打印机的动态库,兼容win98/98/me/nt2000/xp
·易佳自定义报表系统
·用例驱动的需求过程实践

最新发表

·仿windows优化大师界面(源码)
·常见问题的经典解决之SPLITBAR
·pb技巧
·PowerBuilder 10 Beta1下载和相关信息
·如何在pb9中调用WebService
·在非PB9 JSP Target的jsp网页中调用EAServer组件
·质量管理的十三项步骤和八项原则
·用预测性对象点度量面向对象软件(下)
·用预测性对象点度量面向对象软件(上)
·软件开发度量及考核方法
·点度量(4)—最新发布度量方法及参考
·点度量(3)—功能规模度量方法选择
·点度量(2)—功能规模度量方法评价
·点度量(1)—功能规模度量方法概述
·如何对软件质量进行评估
·从印度软件项目管理谈我国软件质量保障
·步步为营,把好质量关
·软件产品的可用性的测试
·软件测试认识的几个误区

基于PB6和ORACLE8开发“劳动信息管理系统”

文章来源:互联网络 文章编辑:admin 添加时间:2004-3-16

刘茂忠(mzliu99@hotmail.com)

摘要:本文介绍了用POWERBUILDER6.0(以下简称PB6)和ORACLE8开发“劳动信息管理系统”(以下简称“系统”)的方法和解决的技术性问题,并介绍一些开发经验。
主题词: PB6  ORACLE8 劳动信息  方法  技术
1   前言
    “劳动信息管理系统”一般情况下都做成数字表格、文字描述、图形显示等形式。“数字表格”即具体的人员、工资数据的结构化描述;“文字描述”即用一段文字叙述或补充说明情况等;这里的“图”包括两类,即照片图(例如BMP位图等)和动态生成的指标描述图(如折线图等)。笔者在选择开发工具和数据库方面,经过详细调研后,觉得用PB6和ORACLE8最为合适,现将开发和应用中的一些体会总结成文,供读者参考。
2   系统的运行环境
    本系统在CLIENT/SERVER结构上运行,SERVER平台为UNIX,装有ORACLE8数据库。CLIENT端通过HUB、ROUTER与SERVER连接,CLIENT端的开发、运行平台是WIN95/98/2000,前端开发工具为PB6,总体网络协议为TCP/IP。
3   系统功能介绍
    该系统包括劳动管理信息的维护和查询两部分,内容充实,立足于应用。表、文、图具全,对比图形由数据自动生成。同类型的数据查询采用了窗口继承的开发方法和动态数据窗口,查询界面统一、清晰。文字部分存入ORACLE库的LONG字段中,用MLE(多行编辑器)作为输入、输出的中间编辑、查询界面。一些原始资料,如照片、背景图等做成了BMP图片,以BLOB数据方式存入ORACLE库中,或存至NFS(网络文件系统)的“虚”盘上,查询时调入图形框(如P_1)内。
4   技术难点及解决的方法
4.1 字符集的选择
    如果字符集选择错误,会出现汉字显示成乱字符的现象,需要从注册表中选择正确的字符集,具体方法是:在WIN95/98/2000下运行注册表编辑程序regedit.exe,选择HKEY_LOCAL_MACHINE,再选择SOFTWARE,再选择ORACLE,然后选择NLS_LANG(语言的国际支持),键入和服务器端相同的字符集。例如服务器端的字符集为AMERICAN_AMERICAN.US7ASCII,在此也输入此项就行了。
4.2 PB6和ORACLE8的连接
    PB6和ORACLE8的连接是一项很重要的内容,很多导致调用数据库失败的原因就出于此,根据不同的用户需求和硬件环境,可灵活选择客户端的接口软件,下面举例子来说明连接方法: 
4.2.1  //通过NET8连接数据库,支持32位的数据访问,安装ORACLE8 的NET8 软件
 //目前PB6支持到ORACLE7.3 ,但是也支持ORACLE8,所以设置如下
SQLCA.DBMS       ="o73" 
//要访问的ORACLE用户名 
SQLCA.LogID      ="lz"
SQLCA.LogPass    ="lzpwd"
SQLCA.UserID     ="lz"
//通过SQL*NET V2和ORACLE库连接
SQLCA.ServerName="@net80"   
Connect using sqlca;
4.2.2  //通过SQL*NET V2连接,可支持16位的数据访问,客户端可选择ORACLE CDE的SQL*NET V2
SQLCA.DBMS       ="o71" 
//要访问的ORACLE用户名 
SQLCA.LogID      ="lz"
SQLCA.LogPass    ="lzpwd"
SQLCA.UserID     ="lz"
//通过SQL*NET V2和ORACLE库连接
SQLCA.ServerName="@snv2"   
Connect using sqlca;
    以上的Script语句描述了和SERVER的连接过程,也可以将上述Script语句存入文件(如pb.ini)中,通过调用文件和数据库做连接。
    若PB6和ORACLE8连接不通,可查一下C:\AUTOEXEC.BAT里边的路径是否包含c:\orawin95\bin(或相应的路径),如果没有此路径说明,PB6和ORACLE8不能连通。
4.3 文字类数据(文本)的入库和查询 
    文本入库和查询可采用PB6的MLE(多行编辑器)作界面,编辑完成后存入ORACLE8的LONG字段中,查询时从LONG字段中取出,放入MLE中查询,下边是一个例子:
//文本的预处理(以去除文本文件中的回车换行符为例说明)
//将文件读入BLOB型变量text中fn=fileopen(txtname,streammode!)
if fn<> -1 then
fileread(fn,text)
fileclose(fn)
//将读入的数据流组合成字符串
article=string(text)
s=len(article)
for v=1 to s
t=pos(article,char(13)+char(10),v) 
if t>0 then
article=replace(article,t,2,"")
else
end if
next 
mle_1.text=article
//将处理后的文件c:\ldxx.txt存盘,文件中的回车换行符已全部去掉
text1=blob(article)
filname="c:\ldxx.txt"
fn=fileopen(filname,streammode!,write!,lockwrite!,replace!)   
if fn<>-1 then
filewrite(fn,text1) 
fileclose(fn)  
end if
//文本入库
bigtext1=blob(mle_1.text)
updateblob ldxxwj set bigtext=:bigtext1 where bh=:varbh and rq=:varrq using sqlca;
commit;
//从库中提出放入MLE中查询
selectblob bigtext into :bigtext1 from ldxxwj where bh=:varbh rq=:varrq using sqlca;
mle_1.text=blob(bigtext1)    
//从库中重新生成文本文件filename.txt并存盘
select bigtext into :varfile from ldxxwj where bh=:varbh and rq=:varrq using sqlca;
fname="c:\filename.txt”
fh=fileopen(fname,streammode!,write!,lockwrite!,replace!)   
if fh<>-1 then
filewrite(fh,filen) 
fileclose(fh)     
end if 
4.4  处理图象文件(大的二进制文件)
     职工照片-图象文件(例如BMP位图文件)是二进制文件,将其以数据流方式存入ORACLE8的LONG字段中,查询时从LONG字段中取出,放入图象框(如p_1)中查询,下边是一个例子:
//将图象文件读入BLOB型变量pict中
fn=fileopen(picname,streammode!)
if fn<> -1 then
fileread(fn,pict)
fileclose(fn)
//将图象放入图象框p_1内查看
setpicture(p_1,pict)
end if
//将图象存入表pic 的LONG字段bmpt 中
updateblob pic set bmpt=:pict ;
commit;
4.5  使用动态数据窗口
    动态数据窗口指的是在程序的运行过程中通过SQL语句的改变动态地创建、修改数据窗口的内容和表现形式,它多用在对同类型的对象的描述过程中,“劳动信息查询系统”的一些类似的内容可用动态数据窗口来编制,表现形式一致、构造界面统一、编程效率高,当然还有其它一些优点。下边是一个创建动态数据窗口并由此绘出趋势图的例子(动态数据窗口dw_1,图形框gr_1):
dw_1.Create(SyntaxFromSQL(SQLCA,"SELECT sj,val01  FROM tab01 where  ytmh=’"+rowcha+"’ ORDER BY sj  ","style=(type=grid)",err))
//执行上述语句会动态地产生类型为grid的数据窗口dw_1。
//由下边这段程序做出趋势图:
//将数据调入数据窗口
dw_1.SetTransObject(sqlca)    
dw_1.Retrieve()
rows = rowcount(dw_1)
if rows>0 then 
gr_1.SetRedraw(False)
gr_1.reset(all!)
gr_1.addseries("dz1")
for  i =1  to rows
xis=mid(getitemstring(dw_1,i,1),3,2)
yis=getitemnumber(dw_1,i,2)
if isnull(yis) then
yis=0
end if
gr_1.adddata(1, yis,xis)
next
gr_1.SetRedraw(True)
sum=sum+sum1
st_1.text=string(sum)
end if
//图的类型可根据不同需要随意选择,如选择饼图、柱状、折线图等。
4.6  变量的定义和赋值要正确
一些整型数值尽量不要定义成INT类型,因为一旦超过32767就会出错,一定要定义成LONG类型;带小数的数据变量要定义成DOUBLE型,若定义成LONG类型,会自动设去小数部分,出现精度错误。
    PB6中的日期类变量赋值方式比较固定,若日期变量定义错了,执行有关的SQL语句时会出错,错误现象非常隐蔽,不容易调试,这是编程过程中的常见错误,在此特别强调一下。
   举例如下:
   rqnum1=”2000-06-31”
   rqnum2=”2000-07-01”
   vardate1=string(date(em_1.text),"DD-MMM-YY")
   vardate2=string(date(em_2.text),"DD-MMM-YY")
   em_1.text、em_2.text可以用一有意义的日期字符串代替:
   vardate1=string(date(rqnum1),"DD-MMM-YY")
   vardate2=string(date(rqnum2),"DD-MMM-YY")
   这样以来可定义一条正确的SQL语句串:
   sqlsyn="select distinct bh,xm,rq from ldxx where& 
   rq >= "  + "’" + vardate1 + "’" + " and rq <= "  + "’" + vardate2+ "’" 
4.7 查询权限的设置
    随着信息系统的不断完善,数据保密问题变得越来越重要,用户必须正确地键入密码,才能做查询。本系统的处理方法是:面对同一台微机,谁能正确地键入密码,谁就能做查询,该系统的密码是通过密码表中的数据经过预定的函数计算产生的,达到了数据保密要求。
4.8  用EXCEL作为报表制作和输出工具
    用PB6的数据窗口做一些复杂表格的输出(这里指输出到打印机)不是很方便,但PB6可将数据窗口中的数据生成EXCEL文件,再通过EXCEL的数据链接,将对应数据调入事先定义好的EXCEL样板表中,灵活地按用户要求做编辑和输出。
PB6生成EXCEL格式文件的SCRIPT语句举例如下:
dw_1.SaveAs("c:\ldxx\ldxx.xls",excel!,true)
4.9 巧妙地选择数据窗口(如GRID类型)中各单元的层次,画出复杂的表头
    该系统有一些复杂的查询界面,表头中套表头,表格中套表格,做起来难度较大,通过使用数据窗口中各单元text框的Layer属性(background、band、foreground),合理地进行组织,就能作出复杂的查询界面。
5   结束语
通过该系统的开发和应用,笔者认为开发“劳动信息查询系统”的最佳选择就是该系统利用的工具和方法,开发周期短、方便灵活是PB6的最大特点,又能够和EXCEL、WORD等办公软件巧妙结合,输出精美文稿。再加上选择了ORACLE8数据库,更为系统的吞吐能力和可靠性提供了保证。 

[ ]

首页 评论 打印 刷新 返回顶部 关闭
【相关文章】  【相关评论】
目前暂时没有相关文章