当前位置:首页>> PowerBuilder>> PB入门

全文搜索

精华导读

·EasyERP2004 制造行业通用性ERP管理系统
·PB中表的修改对数据窗口和报表的影响的解决办法
·在PB中实现Word内容的替换
·office xp风格菜单基本版
·用PB制作outlook界面源程序(非原来的老外版本)(
·将所见dw内容(包括计算字段)输出到execl中
·ERP在中国应用面临的问题
·PB中使用FORMULA ONE(实例篇
·控制打印机的动态库,兼容win98/98/me/nt2000/xp
·易佳自定义报表系统
·用例驱动的需求过程实践

最新发表

·仿windows优化大师界面(源码)
·常见问题的经典解决之SPLITBAR
·pb技巧
·PowerBuilder 10 Beta1下载和相关信息
·如何在pb9中调用WebService
·在非PB9 JSP Target的jsp网页中调用EAServer组件
·质量管理的十三项步骤和八项原则
·用预测性对象点度量面向对象软件(下)
·用预测性对象点度量面向对象软件(上)
·软件开发度量及考核方法
·点度量(4)—最新发布度量方法及参考
·点度量(3)—功能规模度量方法选择
·点度量(2)—功能规模度量方法评价
·点度量(1)—功能规模度量方法概述
·如何对软件质量进行评估
·从印度软件项目管理谈我国软件质量保障
·步步为营,把好质量关
·软件产品的可用性的测试
·软件测试认识的几个误区

PB中使用FORMULA ONE(实例篇

文章来源:互联网络 文章编辑:admin 添加时间:2004-1-16

作者:Jane_sun(孙剑影) email: Jane_sun@163.net

作者的前一篇文章:PB中使用FORMULA ONE入门介绍

因为转换为htm文件的关系,下面的源代码部分版面结构没有结合缩进的效果,网友可以点击此处下载word格式的文件>>

作者将以一个例子来详细说明F1的用法,以补充前文所述,此例为电力企业停电申请票的上报审批过程,内含过程权限控制,每一权限只能修改F1报表的一个部分,且有做图功能,采用PB 6.5 F1 6 所编,下面将详细说明:

1.建一张申请票的F1文件作为模板,如下图:

为实现权限控制,将I1P38的单元格设上保护,使右半边报表不可写:

1)、选中单元格,鼠标右键FORMAT CELLSPROTECTION下的LOCKED前打勾。

2)FORMAT菜单下SHEET项的PROTECTION前打勾,这句很重要,否则上句不起作用。

2.库中建一停电申请票表DFS_TDSQP

LRSJ 录入时间

TDSJ 停电时间

LRDW 录入单位

GLDW 管理单位

TDSB 停电设备

GZNR 工作内容

KGSJ 开工时间

WGSJ 完工时间

GZR 工作人

ZTM 状态码

SQPNR 申请票内容  IMAGE类型

3.PB窗口中插入F1控件:

POWERBUILDER的窗口中点中OLE图标: 会出现“插入对象”对话框,选择insert control 标签项(如下图),

 

在对象列表中选择 Vci Formula One Workbook,按确定键后,选好插入位置点击鼠标,即加入了一个名为ole_1OLE对象,在其上用鼠标右键选中OCX Properties项,在Show标签下可将Row HeadingColumn Heading项取消选中,将Tabs的值由Bottom改为Off(如下图),加入的OLE对象就是一个没有行头、列头及标签的空白表格。

4.读模板的内容至控件:

declare instance variables:

BLOB vcf_form

declare global variables:

string gs_ztm,gs_lrdw,gs_gldw

datetime gd_lrsj,gd_tdsj

在窗口的OPEN事件中写脚本:

datetime sj    

int fh

string ls_dwmc

em_1.text=string(gd_tdsj,"yyyymmddhh:mm")

selectblob SQPNR into :vcf_form from DFS_TDSQP

       where LRSJ=:gd_lrsj and LRDW=:gs_lrdw

       using sqlca;//取出库中申请票内容

if isnull(vcf_form) then

       ole_1.object.Read("模板.vts", ref fh)//把模板读入OLE控件

       ole_1.object.setactivecell(21,2)

       ole_1.object.Entry=string(gd_tdsj,"mmddhhmm分至")//填入计划停电时间

       ole_1.object.setactivecell(4,3)

       select ZZ_DWMC into :ls_dwmc from B04 where ZZ_DWBM=:gs_lrdw;

       ole_1.object.Entry=ls_dwmc//填入计划停电单位

       ole_1.object.setactivecell(4,6)

       ole_1.object.Entry=xm//填入姓名

else

       if fileexists("c:\book1.vts") then

              filedelete("c:\book1.vts")

       end if

       fh=fileopen("c:\book1.vts",streammode!,write!)//建一临时文件

       if fh<>-1 then

              filewrite(fh,vcf_form)//把库中的库中申请票内容写入临时文件

              fileclose(fh)

              ole_1.object.Read("c:\book1.vts", ref fh)//把临时文件内容读入控件

       else

              MessageBox("错误提示", "打开文件操作错误!")

              close(this)

              return

       end if

END IF

 

CHOOSE CASE qx

       CASE "lr"//权限为二级单位录入时只能录入左半边的报表

              ole_1.object.selection="A1:G38"

              ole_1.object.setprotection(false,false)//A1G38的单元格置为可写,其余不可。

              ole_1.object.enableprotection=true

              ole_1.object.selection="C4"//光标停在C4单元格处

       CASE "gl"

             

       CASE "zd"

             

       CASE "zb"

             

END CHOOSE

5.鼠标右键双击OLE_1控件可直接编辑报表,填入内容至可写的单元格内,可以采用F1的画图工具对报表进行简单的做图。

6.将已修改的控件内容写入数据库:

int fh

OLEobject  book;

string filename="c:\book1.vts"

 

book=ole_1.object

book.Write(filename, 12)//将控件内容写入临时文件

fh=fileopen( filename, StreamMode!)

IF fh<>-1 THEN

       FileRead(fh, vcf_form) //将临时文件内容写入BLOB变量

       FileClose(fh)

ELSE

       RETURN 0

END IF

 

if len(vcf_form )>0 then

       UPDATEBLOB  DFS_TDSQP set SQPNR=:vcf_form

       where LRSJ=:gd_lrsj and LRDW=:gs_lrdw

       using sqlca;//BLOB变量内容写入库中

       IF SQLca.sqlcode=0 THEN

              COMMIT using sqlca;

//            MessageBox("提示", "完成对数据库的申请票存储操作!")

       ELSE

              ROLLBACK using sqlca;

              MessageBox("提示", "申请票存储操作失败!")

              RETURN 0

       END IF

end if

 

gd_tdsj=datetime(date(left(em_1.text,4)+"-"+mid(em_1.text,7,2)+"-"+mid(em_1.text,11,2)),&

        time(mid(em_1.text,15,5)+":00"))

       update DFS_TDSQP set TDSJ=:gd_tdsj , ZTM=:ztm_wf

              where LRSJ=:gd_lrsj and LRDW=:gs_lrdw

              using sqlca;//保存录入时间和录入单位的值

       IF SQLca.sqlcode=0 THEN

              COMMIT using sqlca;

              MessageBox("提示", "完成对数据库的存储操作!")

              return 1

       ELSE

              ROLLBACK using sqlca;

              MessageBox("提示", "停电时间存储操作失败!")

              RETURN 0

       END IF

7、打印控件内容

ole_1.object.fileprint(true)

实际上,readwritesavefiledlgfileprint等函数都是FORMULA ONE所有的,POWERBUILDER中只需在Ole_1后加一个object即可引用这些函数,函数的定义在F1的帮助中,请自己用时查阅。

[ ]

首页 评论 打印 刷新 返回顶部 关闭
【相关文章】  【相关评论】
PB中使用FORMULA ONE入门介绍(作者 Jane_sun)