《2022年pb报表制作powerbuilder报表制作教程pb报表编制教程步骤 .pdf》由会员分享,可在线阅读,更多相关《2022年pb报表制作powerbuilder报表制作教程pb报表编制教程步骤 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、pb 报表制作 powerbuilder报表制作教程 pb 报表编制教程步骤在通常的管理信息系统开发过程中,总是有没完没了的报表需要制作,调试报表花费的时间也是最多而且乏味,还常常不能满足客户的要求。如果能够让用户自己调整报表的格式和内容,然后将它保存下来,程序下次启动时若能自动调用保存了的报表格式那就方便多了。实现原理PowerBuilder中有一种以PSR 为后缀的特殊的保存报表的文件格式(本文简称PSR文件) ,数据窗口可以直接读取PSR 文件生成报表,而程序通过生成PSR 文件,就可以实现动态报表格式的保存。首先,通过设置数据窗口对象(dataobject)中的文本、列等的Resize
2、able和moveable属性为 1来实现对象位置的拖动控制,通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)。其次要保存报表格式。在一个应用中, 数据窗口对象的名称总是惟一的,将每一个数据窗口对象转化成PSR 文件存于数据库表中。在窗口打开时, 程序先校验报表格式是否存在。如果存在,将报表格式读出来放在一个临时文件当中,然后设置数据窗口(datawindow)的数据对象 (dataobject)为这个报表文件,并提取数据; 如果不存在,直接提取数据即可。实现过程1. 建立一个数据库表用以保存报表格式文件,各个字段定义如下: 2. 建立一个窗口w_temp。 定义实例变量如下:
3、string is_dwtype,is_dwobject / 保存报表中对象的类型及名称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
4、ll_count0 then / 读取报表格式文件到大文本变量selectblob memo into:emp_pic from dyn_report where dwobject =:ls_dwobject; / 创建 PSR 临时文件并保存到硬盘ls_reportfile =temp7089.psrll_handle = FileOpen(is_reportfile,StreamMode!,write!,LockWrite!,Replace!) FileWrite(ll_handle,emp_pic) FileClose(ll_handle) dw_print.dataobject = l
5、s_reportfile dw_print.settransobject(sqlca) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - else Dw_print.settransobject(sqlca) End if Dw_print.retrieve() 4. 保存报表格式,这可以通过Cb_savereport按钮的 clicked事件实现。string ls_filename long ll_count blob Emp
6、_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
7、); 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
8、,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
9、”/ 直线对象不能通过设置Resizeable和 moveable属性进行调整,必须通过其他途径is_dwobject = ls_dwoname 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - case “RECTANGLE ”,“ELLIPSE ”,“GRAPH ”,“BITMAP ”is_dwobject = ls_dwoname this.modify(ls_dwoname+“.Resizeable=” + “1” ) t
10、his.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)。然后保存并运行,全部工作到此结束!本程序在 PB7.0 、Oracle 8.05下调试通过。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -