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)
|