PB中使用FORMULA ONE
发布:admin | 发布时间: 2011年8月15日本文是小王整理计算机时找到的,google了一下,网上似乎没有,发上来与大家分享吧。我将以一个例子来详细说明F1的用法,以补充前文所述,此例为电力企业停电申请票的上报审批过程,内含过程权限控制,每一权限只能修改F1报表的一个部分,且有做图功能,采用PB 6.5和F1 6所编,下面将详细说明:
1. 建一张申请票的F1文件作为模板,如下图:
为实现权限控制,将I1:P38的单元格设上保护,使右半边报表不可写:
1)、选中单元格,鼠标右键FORMAT CELLS:PROTECTION下的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_1的OLE对象,在其上用鼠标右键选中OCX Properties项,在Show标签下可将Row Heading和Column 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,"yyyy年mm月dd日hh: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,"mm月dd日hh时mm分至")//填入计划停电时间
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)//将A1:G38的单元格置为可写,其余不可。
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)
实际上,read、write、savefiledlg、fileprint等函数都是FORMULA ONE所有的,POWERBUILDER中只需在Ole_1后加一个object即可引用这些函数,函数的定义在F1的帮助中,请自己用时查阅。
文章如转载,请注明转载自:http://www.5iadmin.com/post/895.html
- 相关文章:
- 1.丹普热水器维修电话
- http://www.dpweixiu.com
- 这篇文章写的真的很不错已经被www.dpweixiu.com所转载。
- 2011-8-16 11:18:00 回复该留言
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。