powerbuilder:PowerBuilder的数据窗口

PowerBuilder是Powersoft公司(已被Sybase收购)推出基于客户机/服务器体系结构强有力开发工具自问世以来深受开发人员好评Datawindow是PB中获取专利技术Control控件它对数据处理思路方法相当简洁数据窗口能处理各种显示格式、进行报表打印对复杂嵌套报表同样处理自如

数据窗口处理机制首先是根据所需显示方式将数据源表中域设计好在运行时将所要数据从数据库服务器上下载到客户机上处理然后将更改后数据进行提交(Commit)或回滚(Rollback)这种处理机制大大降低了数据传输量减轻了网络负担也提高了数据处理速度充分利用数据窗口特点可达到事半功倍效果但是如果有些问题不加注意就会出现意想不到

几个
1.AcceptText
AcceptText功能是将数据窗口当前编辑数据转移到数据窗口缓冲区中通常在关闭窗口及其他情况下判断是否改变了当前数据如果已改变数据应提示用户保存这就杜绝了用户在偶然情况下丢失更改数据现象般用ModiedCount和DeletedCount判断数据是否改变

PB在处理数据窗口时对应开辟了 4个数据缓冲区分别为PrimaryBuffer、DeletedBuffer、FilterBuffer、SortBuffer其中DeletedBuffer存放被删除记录FilterBuffer存放被过滤记录SortBuffer存放排序记录PrimaryBuffer存放其他记录ModiedCount从PrimaryandFilterBuffers中取数据进行判断DeletedCount则从DeletedBuffer中取数据进行判断

PB在接受用户输入时设置了个浮动编辑框用户输入或更改内容并不直接进入PrimaryBuffer而是在用户输入完后进入下个域时PB首先对它进行有效性检测通过后转入PrimaryBuffer如果只改变项数据就关闭窗口则相关数据并没有进入PrimaryBuffer系统判断ModiedCount为0所以不会提示保存数据用AcceptText就可以将浮动编辑框中数据转入缓冲区中在相应段前加上Accepttext,问题就解决了

2.FindRequired

在实际应用中经常需要限制表中些域属性例如银行客户表中账号就不能为Null在提交数据前检查是否将必须输入数据都赋值是个很好编程习惯FindRequired可以解决此问题它通过对数据窗口中数据检查将数据窗口中域属性为Required而并未赋值域(包括相应行、列)找出来

为了利用此在构造数据窗口时就要注意将表中具有NOTNULL属性数据列设为Required(思路方法为:在数据窗口相应域上按鼠标右键或双击左键弹出ColumnObject框选Edit页将Required前框选中按Ok钮即可)在相应事件中插入下列:

longror=1//行数赋1
egercolnbr=0//列数赋0
colname//用来存储列名
mle_required.Text=""
//窗口中多行编辑Control控件
用来存储找到域行、列号
DOWHILErow<>0
colnbr++//继续找下
IFdw_1.FindRequired(Primary!,row,colnbr,colname,FALSE)
<0THENEXIT
//若出错则返回
IFrow<>0THEN
mle_required.Text=mle_required.Text+String(row)+
"~t"&+colname+"~r~n"//保存查出行、列号
ENDIF
//当ROW返回为0则意味再没有查出跳出
循环
LOOP

执行完后多行编辑框中显示为出错地方用户根据提示可以轻易地更改FindRequiredRow、Colnbr参数能自动增加或重置Colname用来存放列

数据突出显示及保护
运行中用户希望显示数据具有明显区分例如学生成绩(不及格分数要用红色显示)有些数据必须只能显示不能让用户修改;还有些数据在有些时候可以修改有些时候不能修改等以上情况可归结为两点:
1.数据突出显示

数据窗口应该能使用户很快找到他们想要信息以颜色区分既满足用户习惯又不占系统资源实现起来也很简单以学生管理为例要求成绩低于60分以红色显示其他不变思路方法是:在数据窗口中对应成绩列(例如'/CJ')上双击鼠标左键或单击鼠标右键弹出ColumnObject对话框选取Expressions页在Color后框中输入:

(cj<60,rgb(255,0,0),rgb(192,192,192))此句表示当成绩小于60则显红色否则灰色显示

IF语句只可能有两种选择如果要更多条件判断则必须用CASE语句例如成绩大于等于90用蓝色小于60用红色其他用绿色则应该用以下语句:

Case(cjWHENIS>=90THENRGB(0,0,255)WHENIS<60THENRGB(255,0,0)ELSERGB(0,255,0))

我们还可以输入更加复杂公式

图形是最好介绍说明语言为了更好体现数据直观性可以采用条件位图思路方法的所以称为条件位图它随数据性质而决定是否显示用可以在上述成绩管理数据窗口前面加上个图片如下图:

双击最左边蝴蝶位图弹出PictureObject对话框选Expressions页在Visible右编辑框写入(xb='0',1,0),此句意义为当性别为0(女)时蝴蝶出现否则蝴蝶消失运行起来相当直观读者可以触类旁通充分利用列属性使用户界面更加友善、漂亮

2.数据保护

有很多情况需要对数据进行保护(即只能显示而不允许修改)学生查询成绩时就是这种情况进行数据保护思路方法有很多种是双击要保护弹出ColumnObject选取Edit页将DisplayOnly框选中;第 2种将要保护TabOrder置0则此列得不到焦点当然就无从修改;第 3种是从根本作起选取Rows菜单再选取UpdateProperties弹出SpecyUpdateProperties对话框将AllowU1pdates设为空这样即使用户更改了也无法更新数据库使更改毫无意义

以上情况都是事先已经确定需要保护数据如果有些数据要保护有些不要保护则以上思路方法就无法实现例如合同台账管理:对于个没有实施合同可以更改对于个已经实施合同则必须加以保护这需要用列保护属性来实现思路方法如下:

双击每弹出ColumnObject对话框选取Expressions页在Protect后框中写入:(sfss='1',1,0),其中sfss为表示合同是否实施如果实施(值为'1')则进行数据保护否则可以更改此思路方法可以在运行中动态控制数据保护方式

数据窗口多表更新
在处理数据时经常需要将几个表中数据放入个数据窗口中进行处理般情况下多表数据源数据窗口只能用于数据检索而不能更新想要更新数据则采用思路方法为:创建数据窗口(将各个表主键包括进去)修改Taborder使数据能被更改然后对应各个表创建相应隐含数据窗口隐含数据窗口数据项和主数据窗口中对应表数据项应完全存盘时将主数据窗口中数据拷贝到相应隐含数据窗口中去逐个保存各隐含数据窗口中数据即可由此看来第 2种思路方法更容易理解和接受实现起来也很简单
小结
数据窗口引入使PB独树奠定了其在客户机/服务器体系前端开发工具中领导地位在运用数据窗口这个工具时应该对它处理机制深入了解否则会产生意想不到(PB是解释型很多问题尤其是有关数据窗口问题在编程过程中检查不出来)PB组中专门有项DWsyntax用来介绍说明数据窗口使用方法读者可以从中吸收到很多有用东西
Tags:  powerbuilder是什么 powerbuilder9.0 powerbuilder powerbuilder

延伸阅读

最新评论

发表评论