51CTO技术论坛_中国领先的IT技术社区's Archiver

飞天兔 发表于 2006-8-28 23:42

PB中使用FORMULA ONE入门介绍

在使用 POWERBUILDER 编程中,往往会遇到处理复杂表格的情况,这些表格数量很大,表格结构复杂,如用一般的 FREEFORM 风格的数据窗口来实现,则报表编程工作会占相当大的时间及精力,一旦报表格式略有改变,则程序的维护工作会很繁琐。其实 VISUAL COMPONENTS 的 FORMULA ONE 就是一个与 POWERBUILDER 结合非常紧密的报表工具,我们可以从 POWERBUILDER 进入 FORMULA ONE ,还可以在 POWERBUILDER 下直接使用 FORMULA ONE 提供的各种函数,因为 FORMULA ONE 的文件小,与数据库的存取操作速度较快,所以建议使用它来制作报表。下面详细介绍它的使用方法:
[b]一、 [/b][b]安装及使用 FORMULA ONE [/b]

[img]http://www.lukin.cn/up_files/image/2006-2-20/46811161.gif[/img]
formula one在本站有下载,注意6.0版本安装过程中要输入序列号,否则使用时会告警。安装完毕后,运行 vcf1.exe 可看到如上的程序环境,其文件后缀名为 vts ,它兼容中文,具备类似 EXCEL 的功能:如格式编排、制作表格线、移动和复制单元格、单元格的计算、画简单框图等等。另外, FORMULA ONE 中还具有上百种函数,可以在 VISUAL C++ 、 VISUAL BASIC 、和 POWERBUILDER 中引用。对此不再详细说明。
[b]二、在 POWERBUILDER 窗口中加入一个 OLE 控件 [/b]
POWERBUILDER 支持 WINDOWS 具备的对象连接与嵌入功能(即 OLE 功能),我们可以直接在窗口上放置 OLE 2.0 的控件,然后将 WINDOWS 支持的 OLE 对象连接到 OLE 2.0 控件中,这样就能在 POWERBUILDER 应用中利用 OLE 服务器的命令和函数完成对 OLE 对象的操作工作。
在 POWERBUILDER 的窗口中点中 OLE 图标:
[img]http://www.lukin.cn/up_files/image/2006-2-20/46811162.gif[/img]会出现“插入对象”对话框,选择 insert control 标签项(如下图),

[img]http://www.lukin.cn/up_files/image/2006-2-20/46811163.gif[/img]
在对象列表中选择 Vci Formula One Workbook ,按确定键后,选好插入位置点击鼠标,即加入了一个名为 ole_1 的 OLE 对象,在其上用鼠标右键选中 OCX Properties 项,在 Show 标签下可将 Row Heading 和 Column Heading 项取消选中,将 Tabs 的值由 Bottom 改为 Off (如下图),加入的 OLE 对象就是一个没有行头、列头及标签的空白表格。

[img]http://www.lukin.cn/up_files/image/2006-2-20/46811164.gif[/img]
[b]三、 FORMULA ONE 文件与窗口中的 OLE 对象之间进行读写操作 [/b]
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 即可引用这些函数。
[b]四、数据库与 FORMULA ONE 文件之间进行读写操作: [/b]
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 对象打开该文件,填好内容后存入数据库,此后就可以对数据库中已存在的报表字段进行存取操作。如果报表格式发生变化,则直接修改模板文件即可,不需要改动程序,维护相当方便。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.