PB动态报表格式自由定义的实现

时间:2024.3.31

PB动态报表格式自由定义的实现

在通常的Server/Client方式MIS开发中,总是有没完没了的报表需要制作,调试报表花费的时间也是最多而且乏味,还常常不能满足客户的要求。要是能够让用户自己调整报表的格式和内容,然后将它保存下来,程序下次启动时它自动调用保存了的报表格式那有多好。本人通过如下方法最终实现了用的要求。

PB(PowerBuilder)有一种以PSR结尾的特殊的保存报表的文件格式(本文简称作PSR文件)。根据数据窗口可以直接读取PSR文件生成报表的原理,程序通过生成PSR文件,实现动态报表格式的保存。

一、实现原理:

PB中的报表其实就相当于是数据窗口。

第一步,动态报表的实现。通过设置数据窗口对象(dataobject)中文本、列等的Resizeable和moveable属性为1来实现对象位置的拖动控制,通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)。

第二步,报表格式的保存。在一个应用当中,数据窗口对象的名称总是唯一的,将每一个数据窗口对象转化成PSR文件存于数据库表中。在窗口打开时,程序先校验报表格式是否存在。如果存在,先将报表格式读取出来放在一个临时文件当中,然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件,然后提取数据;如果不存在,直接提取数据即可。

二、实现过程:

1、建立一个数据库表用以保存报表格式文件。

表名:dyn_report

Dwobject Varchar2(20) 数据窗口对象名称 Primary key

Rptitle Varchar2(80) 报表的标题名称

Memo Long raw 报表格式

2、建立一个窗口w_temp。 定义实例变量如下:

string is_dwtype,is_dwobject //保存报表中对象的类型及名称

控件名称 控件含义

Dw_print 数据窗口对象

Cb_exit 退出按钮

Cb_savereport 报表格式保存按钮

3、在窗口的OPEN事件中加入如下代码, 校验报表格式是否存在,如果存在读取定义

好的报表格式到数据窗口。

blob emp_pic

long ll_handle

string ls_dwobject,ls_reportfile,ls_path

ls_dwobject = dw_print.dataobject

//判断是否存在该数据窗口的报表格式

select count(*) into:ll_count from dyn_report where dwobject =:ls_dwobject;

if ll_count>0 then

//读取报表格式文件到大文本变量

selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject; //创建psr临时文件到硬盘

ls_reportfile = '\temp7089.psr'

ll_handle = FileOpen(is_reportfile,StreamMode!,write!,LockWrite!,Replace!) FileWrite(ll_handle,emp_pic)

FileClose(ll_handle)

dw_print.dataobject = ls_reportfile

dw_print.settransobject(sqlca)

else

Dw_print.settransobject(sqlca)

End if

Dw_print.retrieve()

4、报表格式的保存。通过Cb_savereport按钮的clicked实现。

string ls_filename

long ll_count

blob Emp_id_pic

ls_filename = "temp70201.psr"

//保存报表格式到硬盘临时文件

dw_print.saveas(ls_filename,PSReport! ,false)

sqlca.autocommit = true

select count(*) into :ll_count from dyn_report where dwobject =:is_dwobject;

if ll_count =0 then

insert into dyn_report(dwobject,rptitle)

values(:is_dwobject,:ls_filename,:ls_path);

end if

//从硬盘临时文件读取数据保存到数据库表中

emp_id_pic = of_readbmpfile(ls_filename)//该函数将二进制文件内容读到大文本对象中 //更新数据库

UPDATEBLOB dyn_report SET memo = :Emp_id_pic where dwobject = :is_dwobject; sqlca.autocommit = false

5、动态报表的实现。通过数据窗口dw_print的clicked事件捕获数据窗口中对象,并将

对象名存放在实现变量is_dwobject中,为下一步修改报表作准备。

string ls_type,ls_dwoname

//得到对象类型和名称

ls_type = trim(upper(dwo.type))

ls_dwoname = trim(dwo.name)

is_dwtype = ls_type

choose case ls_type

case "TEXT","CommandButton","GROUPBOX"

is_dwobject = ls_dwoname

//设置为可以拖动和改变大小,其它类同

this.modify(ls_dwoname+".Resizeable='"+"1'")

this.modify(ls_dwoname+".moveable="+"1")

case "LINE" //直线对象不能通过设置Resizeable和moveable属性进行调整,必须通过其它路径

is_dwobject = ls_dwoname

case "RECTANGLE","ELLIPSE","GRAPH","BITMAP"

is_dwobject = ls_dwoname

this.modify(ls_dwoname+".Resizeable='"+"1'")

this.modify(ls_dwoname+".moveable='"+"1'")

case "COLUMN","COMPUTE"

is_dwobject = ls_dwoname this.modify(ls_dwoname+".Resizeable='"+"1'") this.modify(ls_dwoname+".moveable='"+"1'") end choose

然后再通过modify()函数可以实现基本的动态报表操作,这一类的文章较多,PB中也有大量的例子可直接使用,在此这不再累述。

6、在cb_exit按钮的clicked()事件中加入:close(parent)。

7、在应用的open事件中加入: open(w_temp)。然后保存并运行,大功告成啦!

8、本程序在PB7.0加Oracle8.05下调试通过。

更多相关推荐:
各种表格范本

附2成都理工大学学生毕业设计论文开题报告1开题报告可从教务处主页下载A4纸张打印或手工誊写2题目来源填教师科研课题教师拟定学生自拟其它题目类型填理论研究应用研究技术开发其它3工作计划要真实具体各阶段必须明确起止...

开工报告表格范本

工程开工报审表工程进度计划申报表施工组织设计方案报审表材料构配件设备进场使用报验单

应聘表格范本

应聘人员登记表应聘岗位年月日1面试测评表员工登记表3员工转正审批表4员工辞职调出申请表5离职交接清单况要求赔偿交接表交人力资源部存档6调查材料先生女士系贵单位员工关于其调动问题根据本人申请经研究同意调往我单位请...

简历表格范本

个人简历表个人简历个人简历

8D表格范本

8D问题处理报告Page1of1

人员表格式范本

拟派出主要施工管理人员表附表1拟派出主要施工管理人员表附表2拟派出主要施工管理人员表

施工日志表格范本(附带表格)

第一要弄懂填写施工日记的要求1施工日记应按单位工程填写2记录时间从开工到竣工验收时止3逐日记载不许中断4按时真实详细记录中途发生人员变动应当办理交接手续保持施工日记的连续性完整性施工日记应由栋号工长记录第二要清...

协议书格式范本

协议书格式范本协议书概念协议协议是指当事人双方就某一事情问题经过协商后订立的一种具有经济关系或其他关系的契约协议书与合同同属一大类的经济文书都具有法律效力联系也很密切协议可以成为当事人订立某项合同愿望的草签意见...

许可证企业电子钥匙申请表及协议书(填写范本)

许可证企业电子钥匙申请表注请填写完整后打印带号选项为必填项用户基本信息项目类型进出口许可证技术进出口信息管理两用物项审批机关广州市商务委员会企业名称公司全称企业代码13位对外贸易经营者备案登记表或外商投资企业批...

工作分析表(范本)

工作分析表姓名保留2年FORMMG02201

公司设立申请表范本

此为范本仅供参考公司设立登记申请书2公司类型应当填写有限责任公司或股份有限公司其中国有独资公司应当填写有限责任公司国有独资一人有限责任公司应当注明有限责任公司自然人独资或有限责任公司法人独资3股份有限公司应在设...

各种说明书范本

附件2夏天无片等54种非处方药说明书范本夏天无片说明书请仔细阅读说明书并按说明使用或在药师指导下购买和使用药品名称通用名称夏天无片汉语拼音成份性状功能主治活血通络行气止痛用于跌打损伤气血瘀阻所致的肢体疼痛肿胀麻...

表格范本(22篇)