1.在有效性规则中,@col代表应用该规则的当前列,@符号后的文本无关紧要,因此,@col和@var表示同一个东西,其作用是完全一样的.
2.这里介绍的有效性规则是客户諯的数据检查规则,而不是数据库本身的有效性规则,它只对数据窗口有效,要定义数据库本身的有效性规则,需要通过具体DBMS的特殊功能来实现.
事件处理程序的编写环境:
PB有五个地方可以编写程序:分别:应用对象画笔,菜单画笔,窗口画笔,用户对象画笔和函数画笔.
2009年10月17日23时20分40秒 273页
将两个blob连在一起:
integer i,fnum,loops
blob tot_b,b
for i = 1 to loops
bytes_read = fileread(fnum,b)
tot_b =tot_b + b
next
收集废弃函数功能:
Garbagecollect() -该函数立即执行收集废弃对象功能,应用程序执行该函数时,PowerBuilder 识别未用对象并删除该对象及其定义所占用的内存空间.
GarbgeCollectSetTimeLimit()该函数让开发人员设置两次废弃对象收集过程之间的最小时间间隔,在此时段内不执行收集废弃对象功能
GarbageCollecGetTimeLimit()该函数得到当前设置的收集废弃对象的最小时间间隔.
如果把上述时间间隔设置很大的话,就相当于关闭了收集废弃对象功能,此时,当前未使用的类将不会从类缓冲区中清除.
收集废弃对象功能虽然不错,但你还是应该在应用程序中主动使用Destroy语句删除由Create语句创建的对象实例,以充分使用系统资源.
FOR NEXT 循环:
For varname = start to end [step increment]
statementblock
next
脚下留神:
如果循环变量Varname的类型为Integer ,则End的值不能超出整形所能表达的整数的范围,否则会造成死循环.
do ... loop循环中也要注意死循环的问题.
GOTO 语句:
下面是用Goto语句改写的数组求和实例:
Integer li_arr[50]
integer sum
integer i
sum = 0
i = 1
beginloop: //语句标号
sum + = li_arr[50]
i + = 1
if i <= 50 then
GOTO beginloop
end if
脚下留神:
在PowerScript 中完全可以避免使用Goto语句,虽然该语句在某些情况下会简化编程,但对大型项目来说,滥用Goto语句有百害而无一利,对goto语句的态度应该是,合理使用.避免滥用.
Goto 语句只能跳转到当前函数或事件处理程序内部的某个标号处,不能用goto语句将控制转移到其它函数或事件处理程序的某个标号处.
Continue(继续循环)
在do ...loop和 for...next语句的循环体中,遇到continue 语句后,将不执行continue语句后与循环结束前的所有语句,而开始新一轮循环.
多学两招:
1.缺省情况下,当应用程序执行DISCONNECT语句时,系统自动执行一条COMMIT语句,这一缺省并不总是有利的,有时候我们希望在执行DISCONNECT语句时程序本身决定是提交还是回滚事务,在powebuilder 6.0中新引进了一个名称为commitondisconnect 的dbparm参数,该参数设置为'yes'后;执行disconnect语句时系统将首先执行一条commit语句,完成事务的提交;
该参数设置为no,后,执行DISCONNECT语句时系统将首先执行一条rollback语句回滚事务.
2.POWERBUILDER 不支持某些数据库管理系统支持的事务嵌套.
使用游标:
1.用DECLARE 说明游标,
2.用OPEN语句打开游标.
3.使用FETCH语句读取一行数据;
4.处理数据;
5.判断是否已经读完所有数据,未读完时重复执行3~5步;
6.使用CLOSE语句关闭游标;
多学两招:
1.如果你连接的数据库管理系统支持存储过程,那么在POwerScript中你就可以使用定义在数据库中的存储过程,使用存储过程的方法与游标十分类似,
A:首先用DECLARE 语句说明存储过程,其语法请参看联机帮助的"DECLARE PROCEDURE" 的主题.
B:然后用EXECUTE语句执行已说明过程,再使用FETCH语句读取各条记录,
C:最后用CLOSE语句关闭存储过程.
2.在POWERSCRIPT中使用存储过程前应该首先在数据库中定义所需的存储过程.使用存储过程能够提高应用程序的执行效率.
3.应该注意到:并非所有的数据库管理系统都支持存储过程.
脚下留神:
打开游标或存储过程后,如果要使用COMMIT或ROLLBACK语句必须十分小心,因为这两个语句将关闭游标或存储过程.
四种动态SQL语句:
在PB6开发人员指南 306页.
脚下留神:
POSTEVENT()不能用于应用对象
TRIGGEREVENT()和POSTEVENT()不能用于没有事件的对象,比如绘图对象(直线,椭圆等).
注意:
window wc_to_open
string c_w_name
integer age = 60
c_w_name = "w_c_emp1"
OpenwithParm(wc_to_open,age,c_w_name,w_emp) 说明 :
打开由字符串变量c_w_name指定的窗口,并把窗口引用保存到变量wc_to_open中,且使窗口w_emp成为当前要打开窗口的父窗口 ,同时向被打开窗口传递整型参数age(因此该参数值将保存在Message.doubleParm中)
打印窗口:
利用print()
objectname.Print(printjobnumber,x,y{,width,height})
objectname是任意从DragObject类继承得到的对象,包括窗口以及窗口上的控件;
printjobnumber是个表示打印作业号的长整数,打印作业号可用函数Printopen()来得到;
x,y参数是个整数,指定当前对象在打印页上开始打印的位置,以1/1000英寸为单位;
width,height是两个可选参数,它们分别指定当前对象在打印页上打出后的宽度和高度.以1/1000英寸为单位,省略这两个参数时,按对象本身的大小打印.
检测工具栏是否被用户移动
当工具栏被用户移动时,会触发MDI框架窗口的ToolbarMoved事件.同时,powerbuilder 会在全局对象Message的WordParm和LongParm属性中指明移动的工具条和移动到的位置.这两个属性珠取值和意义如下:
Message.wordParm取值 意义
0 FrameBar被移动
1 SheetBar被移动
Message.longparm取值 意义
0 工具栏被移动到左边
1 上边
2 右
3 下
4 浮动
移动没有标题条的窗口
一个简单方案是:在窗口的MouseDown 事件中写上代码:
send(handle(this,274,61458,0)
上述语句向编写代码的窗口发送一条窗口消息WM_SYSCOMMAND(274),并把消息的WordParm参数设置为SC_MOVE +1 (61458).这条语句的功能通知窗口用户将移动鼠标,鼠标移动时窗口要随之一起移动.
Send()函数:向窗口发送一条Windows 消息,Handle() 得到窗口的句柄.
脚下留神:
菜单的事件处理程序中不能通过ParentWindow代词来引用窗口上的控件属性,例如,上面示例中的代码:
w_t.sle_1.text = this.text
就不能用下面的代码来代替:
ParentWindow.sle_1.text = this.text
后一条代码将导致编译错误: