PowerBuilder是Powersoft公司(已被Sybase收购)推出的基于客户机/服务器体系结构的强有力的开发工具自问世以来深受开发人员的好评Datawindow是PB中获取专利技术的控件它对数据的处理方法相当简洁数据窗口能处理各种显示格式进行报表打印对复杂的嵌套报表同样处理自如
数据窗口的处理机制首先是根据所需的显示方式将数据源表中的域设计好在运行时将所要的数据从数据库服务器上下载到客户机上处理然后将更改后的数据进行提交(Commit)或回滚(Rollback)这种处理机制大大降低了数据的传输量减轻了网络的负担也提高了数据的处理速度充分利用数据窗口的特点可达到事半功倍的效果但是如果有些问题不加注意就会出现意想不到的错误
几个函数
AcceptText()
AcceptText()函数的功能是将数据窗口当前编辑的数据转移到数据窗口的缓沖区中程序通常在关闭窗口及其他情况下判断是否改变了当前数据如果已改变数据应提示用户保存这就杜绝了用户在偶然的情况下丢失更改数据的现象一般用ModifiedCount和DeletedCount函数判断数据是否改变
PB在处理数据窗口时对应开辟了四个数据缓沖区分别为PrimaryBufferDeletedBufferFilterBufferSortBuffer其中DeletedBuffer存放被删除的记录FilterBuffer存放被过滤的记录SortBuffer存放排序的记录PrimaryBuffer存放其他记录函数ModifiedCount从PrimaryandFilterBuffers中取数据进行判断DeletedCount则从DeletedBuffer中取数据进行判断
PB在接受用户输入时设置了一个浮动编辑框用户输入或更改的内容并不直接进入PrimaryBuffer而是在用户输入完后进入下一个域时PB首先对它进行有效性检测通过后转入PrimaryBuffer如果只改变一项数据就关闭窗口则相关数据并没有进入PrimaryBuffer系统判断ModifiedCount()为所以不会提示保存数据用AcceptText()函数就可以将浮动编辑框中的数据转入缓沖区中在相应的程序段前加上Accepttext()问题就解决了
FindRequired()
在实际应用中经常需要限制表中一些域的属性例如银行客户表中账号就不能为Null在提交数据前检查是否将必须输入的数据都赋值是一个很好的编程习惯FindRequired函数可以解决此问题它通过对数据窗口中数据的检查将数据窗口中域的属性为Required而并未赋值的域(包括相应的行列)找出来
为了利用此函数在构造数据窗口时就要注意将表中具有NOTNULL属性的数据列设为Required(方法为在数据窗口相应域上按鼠标右键或双击左键弹出ColumnObject框选Edit页将Required前的框选中按Ok钮即可)在相应事件中插入下列程序
longror=//行数赋
integercolnbr=//列数赋
stringcolname//用来存储列名
mle_requiredText=
//窗口中的多行编辑控件
用来存储找到域的行列号
DOWHILErow<>
colnbr++//继续找下一列
IFdw_FindRequired(Primary!rowcolnbrcolnameFALSE)
<THENEXIT
//若程序出错则返回
IFrow<>THEN
mle_requiredText=mle_requiredText+String(row)+
~t&+colname+~r~n//保存查出的行列号
ENDIF
//当ROW返回为则意味再没有查出跳出
[] []