一、powerScript的语法
1.0变量的命名及使用
powerscript的标识符(变量名称)必须以字母或下划线开头,其它的字符可以是下划线(_)、短横线(-)、美元符号($)、号码符号(#) 、百分号(%)。
1.1.最长40个字符(实际可以更长),中间不能有空格
1.2.保留字不能用作标识符(变量名称)。
1.3 标识符不区分大小写,如:PART、part、Part表示同一个标识符
1.4 特殊符号表示
换行符 ~n
回车 ~r
制表 ~t
竖直制表符 ~v
换行 ~f
退格 ~b
波浪号 ~~
单引号 ~‘
双引号 ~""
2.Null(空值)
null是powerbuild与数据库交换数据时使用的一种特殊值,表示数据未定义、不确定,它与空字符串、数值零、以及日期00-00-00的意义完全不同。
powerscript的所有数据类型都支持null,将变量赋null的方法有两个,
2.1.从数据库中读到空值
2.2.使用SetNull函数赋值,例:String person="";
SetNull(person);将person变量的值设置为 null
测试变量是否为null时,使用函数IsNull(),例:IF IsNull(a) THEN,不能使用 IF a=NULL THEN,因为空值不等于任何值,也不等于另一个空值。
3.powerScript中断行、续行与多条语句
3.0 powerScript中的续行符号"&",它放在一行的末尾指示下一行是当前行的继续,例如:
把语句MessageBox("SQL语句出错","出错号="+String(SQLCA.SQLCode))写成两行
MessageBox("SQL语句出错","出错号="+&
String(SQLCA.SQLCode))
但是不能在保留字或标识符(变量名)的中间续行,例如:
MessageBox("SQL语句出错","出错号="+String(SQL&
CA.SQLCode))
如果想一行中写多条语句可以用分号进行分隔例:
a=b+c;g=q-m;
4.powerScript中的注释
4.0 单行注释"//",多行注释"/* */",例: // 这是一条注释
/* 我是注释多行的*/
5.对象、属性、函数和事件的引用方法
5.0对象属性的使用
对象名.属性名,例如:UserEnter=sle_name.Text,sle_name单行文本编辑框的名称,Text是其属性
5.1函数和事件的访问方式
[objectname.][type][calltype][when]functionname([argumentlist))
objectname对象名称
type 类型的取值为Function或Event,用于指明访问的是函数还是事件,默认是Function
calltype 用于指明powerbuilder查找函数的时机,有效取值为:static(默认值)编译时查找函数,如果不存在,则产生编译错误
dynamic程序运行时查找函数,如果不存在,则产生编译错误。
when用于指明函数或事件是立即执行还是当前程序段执行完之后执行,取值为trigger(默认值)立即执行,post当前程序段执行完之后再执行
functionname是指调用的函数或事件的名称,argumentlist是调用函数或事件的参数
例如:把焦点移到单行编辑框中 sle_name.SetFocus()
给按钮添cb_name加单击事件,cb_name.EVENT Trigger Clicked()
6.代词的使用(This、Parent、ParentWindow、Super)
6.0 This表示正在为之编写事件处理程序的对象
6.1 Parent表示当前控件所在的窗口,例如:窗口w_win中有个按钮cb_close,其作用是单击该按钮关闭窗口w_win,我们可以在按钮的Clicked事件处理中写上close(w_win),或close(Parent)
6.2 ParentWindow表示运行时菜单所在的窗口,该代词只能在菜单的事件中使用,例如,关闭菜单的Clicked事件中写上 close(ParentWindow)
6.3 Super调用父对象的Clicked事件处理程序
CALL Super ::Clicked
调用在子类重载的父的函数f_func()
Super:: f_func()
7.powerScript中的数据类型
Blod 表示二进制对象,用于存储大量数据,例如图象、大文本等。
Boolean 布尔开型,取值为true或false
Character或Char 单个ASCII字符
Date 表示日期,包括年(1000-3000)、月(01-12)、日(01-31)
Datetime 表示日期及时间,仅用于访问数据的Datetime类型数据
Decimal或Dec 表示带符号十进制数,最大18位精度
Double 表示带符号的浮点数,15位有效数字
Integer或Int 表示16位带符号整数
Long 表示32位带符号整数
Real 表示带符号浮点数,精度6位
String 表示字符串类型,用于存储字符,长度为0-60000
Time 表示小时,24小时制的时间,小时(00-23)、分(00-59)、秒(00-59)
UnsignedInteger或UnsignedInt或Uint 表示16位无符号整数
UnsignedLong或Ulong 表示32位无符号整数
7.0.any数据类型
any是一种可变的数据类型,程序中给它什么类型的值,它将变成什么类型,any类型可以接受标准数据类型,结构数据类型、对象及数组等各种类型
判断any保存的是什么数据类型,可以使用ClassName函数
8.变量的声明
数据类型 变量名称,例如:Integer i,a,b
Blob类型的变量声明,Blob[{大小}] 变量名,Blob的默认长度为0,系统会根据实际数据的长度自动调整其长度。例如:blob{100} temp_pic //表示长度为100的 blob类型变量
blob ib_picture表示一个默认长度为0的blob变量
Decimal类型的变量声明
Dec|Decimal [{精度}] 变量名,精度是指小数点之后的位数,如果没有指定,则以赋值时的精度为准.
数组的声明
数据类型 数组名称 [大小]
Integer person[30],real lr_array[10,10]声明一个二维数组,real lr_array1[3]={1.2,3.2,3.5}
常量的声明
CONSTANT 数据类型 常量名=常量值,constant可以声明除blob之外的任意标准数据类型
9.变量的作用域
变量的作用域有以下四种:
1. 全局变量
可以在整个程序内访问。
2.共享变量
在一个对象内定义,可以在对象内部的任何地方使用,同一个类的所有实例共享一个共享变量。
3.实例变量
在一个对象内定义,只能在这个对象内部使用
4.局部变量
就是在脚本层定义的变量,只能用于脚本层,且在脚本层的末尾被删除
变量的优先级:局部变量、实例变量、全局变量、共享变量
10.存储过程的声明及使用
10.0 存储过程按返回值分为两类,一类 有返回值,我们把它看成函数;另一类没有返回值,我们称作过程。函数型存储过程使用function关键字,过程型存储过程使用subroutine关键字。
函数型存储过程的声明语法为:
function rtndatatype functionname ({{ref} datatype1 arg1,...{ref} datatypen argn }) rpcfunc{ alias for "spname" }
rtndatatype返回值类型
functionname函数名称
ref关键字指明函数是传引用,省略该关键字则表示传值
datatype arg 表示参数的数据类型和参数名称
rpcfunc 关键字说明是数据库的存储过程说明,而不是动态连接库中外部函数的说明
alias for 关键字是给存储过程起别名,"spname"是别名的名称
例:
function double give_raise(ref double salary) rpcfunc alias for "give_raise_proc"
调用存储过程,double val=2000,double rv
rv=SQLCA.give_raise_proc(val)
11.变量的默认值
blob 默认为0
char 或character 默认值为0
boolean 默认值为 false
Date 默认值是1900-01-01
DateTime 默认值是 1900-01-01 00:00:00
数值类型(int,long,decimal,real,double,unsignedinteger,unsignedLong) 默认值为0
String 默认值是 空字符串("")
Time 默认值 00:00:00
12.条件语句
12.0 if语句
12.1 单行 if ...then 格式为
if cond then action1
else action2
当cond为true时 执行action1,否则执行action2
12.2 多行 if ...then 格式为
if condition1 then action1
elseif condition2 then action2
else action3
end if
例:if parentCorrect>=90 then
grade="a"
elseif parentCorrect>=80 then
grade="b"
elseif parentCorrect>=70 then
grade="c"
elseif parentCorrect>=60 then
grade="d"
else
grade="d"
end if
13. choose case 语句
choose case testexpression
case expressionlist
statementblock
case expressionlist
statementblock
case else
statementblock
end choose
testexpression 是测试表达式,expressionlist是判断表达式,statementblock是执行语句块
判断表达式可以使用如下的形式:
是用逗号分隔的数据,例如:2,4,7
用To 表示一个区间范围,例如:2 To 15
用IS 代表测试值,后跟关系运算符和比较值,例如:IS>30
例:
choose case parentCorrect
case IS >=90
grade="A"
case 80 To 89
grade="B"
case 70 To 79
grade="C"
case 60 To 69
grade="D"
case else
grade="E"
end choose
14. 循环语句
14.1 do...loop循环
do... loop 循环提供了四种形式,分别为:
do until codition...loop
do while condition...loop
do ... loop until condition
do ... loop while condition
do 表示循环的开始,loop 表示循环的结束,condition表示循环条件,是逻辑表达式,其值为true或false
do until condition ... loop的语法格式为:
do until condition
statements
loop
condition条件为false则执行 statemets语句,接着检查条件,直到为true时退出循环
do while condition ... loop的语法格式为:
do while condition
statements
loop
condition执行条件为true时则执行statements语句,接着检查条件,直到为false时退出循环
do... loop until condition的语法格式为:
do
statements
loop until condition
do ... loop while condition的语法格式为:
do
statements
loop while condition
14.2 for ...next循环
for ...next是循环次数确定的循环结构,使循环体的语句执行规定的次数
for varname=start to end [step increment]
statements
next
varname是循环变量,可以为任意的数值,start,end分别为循环变量的初始值和终止值,increment是每次循环后循环变量的步长增量,默认是1
例:
int ii_aar[50]
int sum
int i
for i=1 to 50
sum+=ii_aar[i]
next
15.Call语句的使用
call语句用来调用祖先对象的事件或祖先对象的控件上的事件
Call语句的语法为:
call ancestorobject {controlname} ::event {(argumentlist)}
ancestorobject是祖先对象的名称
controlname 事件名称
event 指定要调用的事件名称
argumentlist 指定事件参数,参数类型、个数由具体事件确定。如果事件要求参数,调用时没有提供参数,系统将默认设置参数值为NULL
例:调用祖先窗口的Open事件
Call w_emp::open
调用祖先窗口上命令按钮cb_close的click事件处理
Call w_emp cb_close :: Clicked
16. MessageBox函数的使用
MessageBox 函数常用于显示出错、警告及其它重要的信息,其语法格式为:
MessageBox(title,text{,Icon{,Button{,Default}}})
大括号中的部分可以省略,title表示标题,text是指显示在窗口的文本。
Icon指定在窗口中显示的图标,是枚举类型,取值为:
Information!、StopSign!、Exclamation!、Quetion!、None!
Information是Icon的默认值
Button参数指定在窗口中显示哪些按钮,有效取值为:
OK! "确定"按钮
OKCance! "确定"、"取消"按钮
YesNo! "是"、"否"按钮
YesNoCancel "是"、"否"、"取消"按钮
RetryCancel! "重试"、"取消" 按钮
AbortRetryIgnore! “终止"、"重试"、"忽略" 按钮
Default 参数指定哪个按钮是默认按钮,即用户按下键盘上的Enter键时,执行哪个按钮的
clicked事件,用户数字1、2、3表示,默认是1
MessageBox的返回值是用户按下的 按钮序号,通过判断返回值能够知道用户按了哪个按钮
例:li_rc=MessageBox(‘保存修改‘,‘你修改了数据窗口的数据,现在是否保存?‘,&
Quetion!,YesNoCancel!)
17. 数据类型转换
17.1字符串转换成数值类型
Integer(String),将字符串转换成Integer
Long(String),将String转换成Long
Real(String),将String转换成Real
Double(String),将String转换成Double
Dec(String),将String转换成Dec
17.2 数值类型转换成字符串
String(number,format),number是任意一种数值类型, format是转换后的格式
例:amount=12345678,String(amount,‘$###,##0.00‘) 转换后为$123,456.78
18.运行其它应用程序的Run
其语法格式为:Run(String{,windowstate})
windowstate的取值为Maximized、Minimized、Normal
Run执行成功返回1、否则返回-1
18、设置焦点函数SetFocus
19. SQL语句介绍
1.建立和断开数据库的连接,使用connect
语法格式为:
connect {using transactionobject}
transactionobject表示事务对象,如果省略则默认使用SQLCA
断开数据库连接语法为:
disconnect {using transactionobject}
2.提交与回滚事务
提交事务的语法为:
commit {using transactionObject}
回滚事务的语法为:
rollback {using transactionObject}
3.单行查询语句select
语法格式:
select fieldlist into varlist from tableList
where criteria {using transactionObject}
例:int emp_num
select employee.Emp_Lname,employee.Emp_name
into :sle_Lname.Text, :sle_Fname.Text
from Employee
where employee.Emp_nbr= :emp_num