powerbuilder是一种优秀的数据库前端开发工具,在客户机/服务器应用市场一直处于领先地位,特别是数据窗口在数据检索和处理方面功能十分强大,在制作一些简单报表时,利用数据窗口可以快速生成。但对于复杂的报表,如多层表头报表、不规则报表,其格式、大小、字体设置等经常需要动态调整,用powerbuilder一般方法制作,需花费大量的人力和时间。例如制作多层表头时,一般采用tabular和grid风格的数据窗口将各个字段用手工方式拼接出来,当报表格式发生微小变化时,就需要重新调整和设计,给开发维护人员增加额外的负担[1]。
microsoftexcel是优秀的办公软件,制表功能强大,可以轻松制作复杂的报表。输电材料检测报表格式复杂,且有严格的限制,虽然powerbuilder提供了丰富的数据显示格式,但其制表功能远不如excel强大,所以本软件采用对象链接与嵌入技术(以下简称ole技术),利用powerbuilder对ole的支持,解决了pb、excel与oracle之间的通讯,将pb强大的数据检索、处理功能和excel优良的制作复杂报表功能结合起来,实现不同应用程序间的有机结合,从而实现了基于客户机/服务器的复杂报表的制作和报表查询功能。
1系统的相关技术
ole技术提供了一种使windows应用程序之间共享数据和程序的机制。通过ole技术的应用程序不仅可以传送数据,还可以对其它应用程序所提供的链接与嵌入对象进行远程访问和操作。pb提供了对ole的支持,pb以ole控件作为容器,从中调用ole服务器应用程序来显示和操纵ole对象。
ole控件在pb窗口中创建,用户可以激活ole控件,并使用由ole服务器应用程序提供的功能编辑其中的ole对象,也可以通过编程激活ole对象,并向ole服务器应用程序发送命令使ole交互自动化。激活方式有2种:即席激活(in-place)和离席激活(offsite)。即席激活状态下服务器应用程序所带的菜单将与pb应用程序菜单合并,开发人员可以在菜单画笔中设置这2个菜单的合并方式。离席激活意味着启动服务器应用程序,而ole控件中的对象将作为一个文档在服务器应用程序(这里是excel)的窗口中打开。此时服务器应用程序中的菜单都提供给了用户,离席激活一个控件的脚本:ole_1.activate(offsite!)。
ole对象有链接和嵌入2种方式。嵌入对象的数据是存储在应用程序中的,在开发过程中。嵌入对象存储在应用程序的应用库(.pbl)中,当生成应用后,这些数据将存放在.exe或.pbd文件中,嵌入对象中的数据为用户提供了一个模板或一个起点。虽然在程序的运行中可以修改,但修改的数据不会被保存。对象嵌入方式适用于模板或其他固定的基础源数据,用户每次从ole对象中获取模板,进行编辑后把结果存到其他数据库或文件中。链接对象的数据放在应用程序以外。当链接一个对象时,在pb应用程序中不存放数据文件,而是存放引用数据的指针。使用链接的数据,对数据的处理和保存都由服务器应用程序负责。链接方式应用于需要多个应用程序共享的数据文件,任何一个应用程序修改了数据文件,都将影响到所有链接该文件的应用程序。本软件采用离席激活嵌入方式。
2报表的生成
输电材料包括绞线、防振锤、阻尼线、绝缘子等,这里以绞线为例。常用绞线有5种,需要生成5种检测报表。生成检测报表的开发流程图见图1。
2.1系统运行环境
该系统采用客户机/服务器模式,服务器端操作系统采用windowsnt4.0或windows2000server。后台数据库管理系统采用关系型数据库oracle8.0.。客户端开发工具采用powerbuilder8.0。客户端操作系统采用windows98或windows2000服务器或专业版。
2.2报表的实现
后台数据库端检测报告表exam-report的逻辑结构见表1。
报表格式复杂,共3~4页。第1页是封面,第2页包括检测仪器设备等,第3~4页是报表检测数据,主要包括检测项目、标准、结论、评定结论。
用excel制作出各种绞线模板,采用合并单元格方法,这样单元格都有明确的地址。图2为生成后的钢芯铝绞线报表第3页。图中电阻率的检测标准单元格地址是e9。检测项目的内容在模板中做好,单元格位置不能随意调整,否则自动生成的数据会发生混乱,须重新调整程序。excel绞线模板存放于pb开发程序所在的文件夹中。样品编号、检验结果、评定由用户输入。
在pb中创建窗口w-exam-report,在窗口中创建检测标准数据窗口控件dw-3、检测设备数据窗口控件dw-4、生成报表数据窗口控件dw-1、报表编号dw-2、命令按钮(cb-报表、cb-清空、cb-退出)、创建用户自定义事件(ue-ljx、ue-gxljx、ue-dxgjx、ue-lbgjx、ue-gxlhjjx)、单选按钮rb-导线、rb-地线。
窗口中创建一个ole控件ole-1,选择excel应用程序为其对象,系统根据用户选择的绞线类别、型号调入相关的绞线模板,并根据检测类别和导线、地线的不同自动生成报告编号。激活ole控件,此时调用了excel应用程序,并提取数据库中的有关数据(检测设备和检测标准),通过数据窗口getitemstring()函数写入excel工作表的相关地址中,检测数据的输入、另存为.xls文件、修改、字体设置、打印报表全部在excel环境中完成。部分代码如下。
a.在窗口w-exam-report的open事件中添写如下代码建立数据窗口与事务对象的连接
c.用户自定义事件ue-gxljx的部分代码
filecopy(‘gxljx.xls’,‘tmp.xls’,ture)
即拷贝文件gxljx.xls到tmp.xls,tmp.xls是临时模板,全覆盖方式;
(‘g2’).value=bgbh
即创建报表第1页,将报告编号添入excel单元格地址(g2)中;
即创建报表第3页,dw-3检测标准数据窗口,从数据库检测标准表中提取检测标准。
报表设置完成后将整个报表以blob(二进制大对象)型存入oracle数据库表exam-report的blob型列中,保证了数据信息的完整性,便于查询和修改。这样即使将来检测标准调整,检测报表中的信息也不会随之改变,可用selectblob函数和updateblob函数从数据库中检索和修改检测报表。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』