作者:Jane_sun email:
Jane_sun@163.net
在使用POWERBUILDER编程中,往往会遇到处理复杂表格的情况,这些表格数量很大,表格结构复杂,如用一般的FREEFORM风格的数据窗口来实现,则报表编程工作会占相当大的时间及精力,一旦报表格式略有改变,则程序的维护工作会很繁琐。其实VISUAL
COMPONENTS的FORMULA
ONE就是一个与POWERBUILDER结合非常紧密的报表工具,我们可以从POWERBUILDER进入FORMULA
ONE,还可以在POWERBUILDER下直接使用FORMULA
ONE提供的各种函数,因为FORMULA
ONE的文件小,与数据库的存取操作速度较快,所以建议使用它来制作报表。下面详细介绍它的使用方法:
一、
安装及使用FORMULA
ONE
formula
one在本站有下载,注意6.0版本安装过程中要输入序列号,否则使用时会告警。安装完毕后,运行vcf1.exe可看到如上的程序环境,其文件后缀名为vts,它兼容中文,具备类似EXCEL的功能:如格式编排、制作表格线、移动和复制单元格、单元格的计算、画简单框图等等。另外,FORMULA
ONE中还具有上百种函数,可以在VISUAL
C++、VISUAL
BASIC、和POWERBUILDER中引用。对此不再详细说明。
二、在POWERBUILDER窗口中加入一个OLE控件
POWERBUILDER支持WINDOWS具备的对象连接与嵌入功能(即OLE功能),我们可以直接在窗口上放置OLE
2.0的控件,然后将WINDOWS支持的OLE对象连接到OLE
2.0控件中,这样就能在POWERBUILDER应用中利用OLE服务器的命令和函数完成对OLE对象的操作工作。
在POWERBUILDER的窗口中点中OLE图标:
会出现“插入对象”对话框,选择insert
control 标签项(如下图),
在对象列表中选择
Vci Formula One Workbook,按确定键后,选好插入位置点击鼠标,即加入了一个名为ole_1的OLE对象,在其上用鼠标右键选中OCX
Properties项,在Show标签下可将Row
Heading和Column
Heading项取消选中,将Tabs的值由Bottom改为Off(如下图),加入的OLE对象就是一个没有行头、列头及标签的空白表格。
三、FORMULA
ONE文件与窗口中的OLE对象之间进行读写操作
Ole_1.object.read(“filename”,ref
return1)
该句将一个FORMULA
ONE文件内容读入OLE对象,返回值为return1。
此后在窗口的ole_1中会出现该文件内容,可直接在窗口上修改其内容,也可以双击鼠标右键可进入FORMULA
ONE的编辑环境中进行修改。
Ole_1.object.savefiledlg(“保存文件”,ref
filename,ref return1)
Ole_1.object.write(filename,return1)
这两句首先给出一个保存文件对话框,让使用者输入一个FORMULA
ONE文件名,然后再将OLE对象内容写入FORMULA
ONE文件。
实际上,read、write、savefiledlg等函数都是FORMULA
ONE所有的,POWERBUILDER中只需在Ole_1后加一个object即可引用这些函数。
四、数据库与FORMULA
ONE文件之间进行读写操作:
1.数据库中大文本字段内容读入FORMULA
ONE文件中:
selectblob
大文本字段名
into :blob变量名
from 表名
where…
该句查询大文本字段内容到blob变量中。
If fileexist(“file1.vts”) then
filedelete(“file1.vts”)
End if
Return1=fileopen(“file1.vts”,streammode!,write!)
以上语句新建了一个临时文件file1.vts
If return1<>-1 then
filewrite(return1,blob变量)
fileclose(return1)
Else
messagebox(“error”, “Can’t open
file!”)
End if
本条件语句将blob变量的内容写入临时文件中,如出错则告警。
2.FORMULA ONE文件的内容存入数据库中
return1=fileopen(“file1.vts”,streammode!,write!)
If return1<>-1 then
fileread(return1,blob变量)
fileclose(return1)
end if
以上语句将临时文件内容读入blob变量中。
if len(blob变量)>0
then
updateblob
表名
set 大文本字段名=:blob变量
where…
end if
该条件语句给数据库中的大文本字段赋值。
如上所述可以利用FORMULA
ONE的文件实现POWERBUILDER窗口中OLE对象与数据库大文本字段之间信息传送。此外,在POWERBUILDER中也提供数据窗口中用EXCEL做OLE对象来存取数据库的大文本字段,但它不能调用EXCEL的函数,因此不够灵活。此种方法占用的系统资源是FORMULA
ONE的数倍,在大型数据库的存取操作中会大大增加日志,存取速度也会减慢,因此不适合大范围应用。
在日常应用中,首先制作一个FORMULA
ONE的报表模板文件,通过POWERBUILDER窗口的OLE对象打开该文件,填好内容后存入数据库,此后就可以对数据库中已存在的报表字段进行存取操作。如果报表格式发生变化,则直接修改模板文件即可,不需要改动程序,维护相当方便。