PB的数据有限规则

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
 后一条代码将导致编译错误:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值