你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
利用PowerBuilder开发格式生成器(1)
 


  DataWindow(以下简称DW)是PowerBuilder的核心功能,使程序员可以图形化生成SQL,减少编程工作量,并减少程序对系统资源的占用,扩展了报表的特性。我们知道,面向数据库的应用都是以数据为中心的,数据以一定的格式被封装起来进行存取,而DW正是显示与操作数据的窗口。我们可以简单地将DW视为一种数据格式,一旦生成一个数据格式(不管是由用户还是由程序员),则既可以通过这种数据格式打印报表(此时该数据格式就是一份报表格式),也可以通过该种数据格式录入数据(此时该数据格式就是一个编辑窗口)。本文所述格式生成器, 其本质就是一个汉化的DataWindow生成器,相当于把PowerBuilder中的DataWindow Painter 功能分离出来,使用户在不了解PB4.0的情况下,也能自己独立地产生一份满意的报表(或者数据录入格式),并且如果用户对于某一个数据格式不满意,可以通过格式生成器自己进行修改。DW语法可以通过SyntaxFromSql得到。对于开发人员而言,可以在打开library painter后选中某一个DW在主菜单中点Entry-->Export,生成一个扩展名为.srd的文件,该文件为文本文件,可以通过编辑方式浏览。

1.给用户提供一个图形化的界面选择数据源
    以WATCOM
数据库为例,systable表中creator字段为0表示为系统表。程序A和程序B中lb -table为listbox控件,显示数据库中所有表名,lb-column显示表中对应列。systemtable为窗口级的布尔变量,表明是否选择系统表(设计思路仿pb4.0中DataWindow Painter中SQL的生成方法)。
程序A 函数f-table-list
STRING table-name
DECLARE curtable CURSOR FOR
SELECT table-name
FROM systable
WHERE creator<>0;
DECLARE cursystem-table CURSOR FOR
SELECT table-name FROM systable;
lb-table.reset()
lb-table.setredraw(FALSE)
lb-column.reset()
OPEN curtable;
OPEN cursystem-table;
DO
IF systemtable THEN
FETCH cursystem-table INTO:table-name;
ELSE
FETCH curtable INTO:table-name;
END IF
IF
sqlca.sqlcode=0 THEN
lb-table.additem(table-name)
ELSE
EXIT
ENDIF
LOOP while TRUE
CLOSE curtable;
CLOSE cursystem-table;
lb-table.setredraw(TRUE)
程序B 函数f-column-list():
STRING cname,coltype
DECLARE curcolumn CURSOR FOR
SELECT cname,coltype FROM syscolumns WHERE
tname = :tablename;
lb-column.setredraw(false)
lb-column.reset()
OPEN curcolumn;
DO
FETCH curcolumn INTO:cname,:coltype;
IF
sqlca.sqlcode=0 THEN
lb-column.additem(cname)
ELSE
EXIT
END IF
LOOP WHILE TRUE
CLOSE curcolumn;
lb-column.setredraw(TRUE)

2.生成一个新的DW
dw-print.create(
sqlca.SYNTAXfromSQL(&
selectstring,&
"Style(Report=Yes Type="+form+")"+&
"Text(Font.Face="楷体"Border=6"+&
"Background.mode=1 Background.color=12632256)"+&
"Column(Border=2 Font.Face="楷体""+&
"Background.mode=1"+&
"Background.color=12632256",errorbuffer),errorbuffer)"
(1)将DW Object的ReadOnly属性和ShowDefinition置为YES,则DW为只读状态且显示每一个数据列的内部定义名称。因为用户是在编辑数据格式而非输入数据,将数据列的内部定义名称显示出来是为了便于用户了解所处理的对象

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089