PB教程第十四节.docx
《PB教程第十四节.docx》由会员分享,可在线阅读,更多相关《PB教程第十四节.docx(18页珍藏版)》请在冰豆网上搜索。
![PB教程第十四节.docx](https://file1.bdocx.com/fileroot1/2023-7/13/484bf417-8f94-40fd-b2c5-dc1738c0ac3d/484bf417-8f94-40fd-b2c5-dc1738c0ac3d1.gif)
PB教程第十四节
14.1名词
14.1.1注释行
注释行用来书写说明,它有两种写法:
以“必需一字母开头
2.最长40个字符,而且中间不能插入空格。
3.区分大小写
4.表示符能够有字母、数字和如下的特殊字符组成:
短划线“-”、下划线“_”、美元符号“$”,
号码符号“#”和百分符号“%”。
例如:
butName,main_win,code2都是适合的标识符。
14.1.3标号
尽管在咱们不提倡在程序设计当中利用GOTO语句,可是POWERSCRIPT仍然支持它。
能够利用标号来指
明转移的地址。
标号的写法是在标识符的后面加上冒号。
例如:
ADDRESS1:
PROCESSDATA()...
或
ADDRESS2:
PROCESSDATA()
14.1.4特殊字符
在字符串当中能够包括特殊字符。
它们的写法如下:
新行(NEWLINE):
~n
制表符(TAB):
~t
垂直制表(VERTICALTAB):
~v
回车(CARRIGERETURN):
~r
换行(FORMFEED):
~f
退格(BACKSPACE):
~b
双引号:
~
单引号:
~
弯曲符:
~~
也能够利用在~符号的后面跟上一个数的方式来表示那个数值对应的ASCII字符。
如~888,~h16(十六
进制),~o999(八进制)。
14.1.5空值
空值(NULL)是在与数据库互换数据的时候利用的一种特殊值。
这与空字符、数值零、和日期00000000
不同。
空值既不是零,也不是非零的任何数值。
14.1.6保留字
保留字是指被POWERBUILDER内部利用,而不能作为标识符的单字,它们有:
alias,and,autoinstantiate,call,case,choose,close,commit,connect,constant,continue,create,
cursor,declare,delete,describe,descriptor,destroy,disconnect,do,dynamic,else,elseif,end,
enumerated,event,execute,exit,external,false,fetch,first,for,forward,from,function,global,
goto,halt,if,immediate,indirect,insert,into,intrinsic,is,last,library,loop,next,not,of,on,
open,or,parent,post,prepare,prior,private,privateread,privatewrite,procedure,protected,
protectread,protectwrite,prototypes,public,readonly,ref,return,rollback,rpcfunc,select,
selectblob,shared,static,step,subroutine,super,ssytem,systemread,systemwrite,then,this,
to,trigger,true,type,until,update,updateblob,using,varibles,while,with,within,_debug
14.this
代名词this代表窗口、用户对象、菜单、应用对象或操纵对象自身。
例如说,在一个静态文本控件的
脚本中敲入如此的代码:
(text=您好),静态文本上面的文本就会改变成“您好”。
14.Parent
Parent能够在窗口的操纵、用户定制对象和菜单的程序中利用。
当在窗口的操纵当中利用Parent的时候,
Parent指向包容该操纵的窗口。
例如说若是把下面的语句写入某窗口的一个按钮的CLICKED事件的脚本当
中的话,那么在用户单击那个按钮的时候,就会关闭那个窗口。
14.ParentWindow
ParentWindow只能在菜单的脚本当中利用,它代表运行时菜单所在的窗口,例如:
在一条菜单命令的脚
本中输入如此的代码的话将会关闭菜单所在的窗口。
Close(ParentWindow)
14.Super
在编写操纵或对象的子对象的脚本的时候,能够挪用先人的脚本,用户能够直接利用先人对象的名称
挪用它们,也能够利用Super来引用直接双亲。
例如要挪用父类的Clicked脚本能够如此写:
CALLSuper:
:
Clicked
需要注意的是,用户只能在先人的直接后代的函数和事件当中利用Super,不然编译器将返回语法错误。
而且咱们只能在子类窗口的事件脚本或函数当中利用Super,而不能在子类窗口的操纵当中利用Super
,不然编译器也将产生语法错误。
14.续行和断句
大多数情形之下,每一条语句占据一行,能够有的时候会碰到语句超长或希望多写几行的情形,这时
就需要用到续行符&若是行尾的字符恰好是&,那么下一行自动是本行的继续行。
例子:
IFnum1=5AND&
num2=6THENnum3=7
若是要将一个长字符串分为多行的时候,仅仅需要在行末加入&,编译器就会以为下一行的内容也是那个
字符串的内容。
例子:
astring=abcdefghi&
jklmnopqrstuvwxyz
需要注意的是利用这种方式将会把续行符前面的和继续行初始处的空格或TAB都作为字符串的的一部份
,若是希望幸免这种情形,能够利用下面的这种格式:
astring=abcdefghi&
+jklmnopqrstuvwxyz
14.2POWERSCRIPT语言
14.赋值语句
赋值语句能够把一个表达式的结果或变量和常量的值,赋给一个变量或对象的属性或成员变量。
赋值语句的格式是:
variablename=expression
其中variablename代表变量名,expression代表表达式,它将表达式的值赋给等号左侧的变量。
例如:
string=abc
ainteger=6
利用赋值语句也能够为数组变量赋值。
例如:
integeraarray[]
aarray={1,2,3,4,5,6}
在变量和数组之间也能够利用赋值语句复制数据:
array1=array2
14.单目操作符
POWERBUILDER也提供了一些类似于C语言的单目操作符。
咱们利用一个表格进行说明:
操作符
例子
等价于
++
I++
I=I+1
--
I--
I=I-1
+=
I+=6
I=I+6
-=
I-=6
I=I-6
*=
I*=6
I=I*6
/=
I/=6
I=I/6
^=
I^=6
I=I^6
14.CALL
CALL语句在继承对象中挪用先人对象的脚本,用户在继承对象的事件中不但能够挪用先人的用户对象、菜单对象或窗口对象的脚本,而且能够挪用先人窗口或用户对象中的操纵的脚本。
CALL语句的语法格式为:
CALLancestorobject[.controlname]:
:
event[(argument)]
其中,ancestorobject指明先人对象的标识名,controlname是操纵的名字,event和argument代表被挪用的事件及其参数列表,若是事件概念的参数在挪用的时候没有argument,那么空值被作为默许值传递。
新版本的语法许诺用户触发(trigger)或告知挪用(post)先人的事件,可是不能挪用先人中操纵的脚本。
14.CHOOSECASE
CHOOSECASE操纵结构依照测试值决定程序执行方向,它是一个条件多分支结构。
CHOOSECASE的语法格式为:
CHOOSECASEtestexpression
CASEexpressionlist
Statement
[CASEexpressionlist
Statement
......]
[CASEELSE
Statement]
ENDCHOOSE
testtexpression代表测试值,不同的测试值引发不同的语句的执行。
expressionlist代表判定表达式,它能够用以下的几种形式:
1用逗号分割的数据,例如:
1,2,3,4,5,6,
2用TO表示一个区间,例如:
1TO60
3用IS代表测试值,并辅以关系操作符,例如:
IS>20
4利用以上的三种方式的综合,用逗号分隔,例如:
6,6TO16,IS>36
在CHOOSECASE语句中至少包括一条CASE,而且利用ENDCHOOSE作为结尾。
POWERBUILDER将逐条地查找CASE,若是找到与测试值匹配的判定表达式的时候,就执行该CASE后面的语句,然后转向指向ENDCHOOSE后的第一条语句若是包括CASEELSE,在位发觉任何匹配CASE条件的时候,执行CASEELSE后面的语句。
例子:
CHOOSECASEnum
CASE6
num=7
CASEIS>36
num=36
CASEELSE
num=56
ENDCHOOSE
14.FORNEXT
FOR...NEXT是一个计数循环体。
利用该语句能够是循环体中的语句被执行规定的次数。
该语句的语法格式为:
FORvarname=startTOend[stepincrement]
statement
NEXT
其中,varname代表循环变量,start、end别离为初值和终值,increment为步长增量,缺省值为1。
在利用FORNEXT语句的时候应该注意,varname是integer型,end0的值不能取得过大,以防超出integer的取值范围,造成溢出。
例子:
integerarray1[16]
FORI=1to16
array1[I]=I
NEXT
14.DO…LOOP
DO…LOOP是一个通用的循环语句。
它包括四种形式:
1DOUNTIL…LOOP
DOUNTIL…LOOP的语法格式为:
DOUNTILcondition
statements
LOOP
其中condition代表循环进行的条件,statements表示循环执行的语句。
DOUNTIL语句执行循环体的语句直到UNTIL后面标明的条件表达式结果为TRUE,若是在第一次该计算表达式时结果即为FALSE,那么循环体中的语句可不能被执行。
2DOWHILE…LOOP
DOWHILE…LOOP的语法格式为:
DOWHILEcondition
statements
LOOP
其中condition代表循环进行的条件,statements表示循环执行的语句。
DOWHILE语句在WHILE后的表达式结果为TRUE时,执行循环体中的语句,若是第一次对表达式求值的结果即为FALSE,那么循环体中的语句可不能被执行。
3DO…LOOPUNTIL
DO…LOOPUNTIL的语法格式为:
DO
statements
LOOPUNTILcondition
其中condition代表循环进行的条件,statements表示循环执行的语句。
LOOPUNTIL语句在UNTIL后表达式结果为FALSE是执行循环体中的语句,直到表达式结果为TRUE时终止,可是循环体中的语句至少被执行一次。
4DO…LOOPWHILE
DO…LOOPWHILE的语法格式为:
DO
statements
LOOPWHILEcondition
其中condition代表循环进行的条件,statements表示循环执行的语句。
LOOPWHILE语句当WHILE后面的条件表达式的结果为TRUE的时候,执行循环体中的语句,若是表达式计算结果为FALSE,循环终止,但至少被执行一次。
14.CONTINUE
在DO…LOOP或FOR…NEXT语句循环体当中,碰到CONTINUE语句的时候,将不执行在CONTINUE后面和循环终止之前的语句,开始新一轮循环。
例如在下面的例子中,若是NUM1的值大于36,那么执行函数FUNCTION1。
FORNUM1=1TO56
IFNUM1<=36THENFUNCTION1()ELSE&
CONTINUE
NEXT
14.EXIT
在DO...LOOP或FOR...NEXT语句循环体当中,利用EXIT能够跳出循环。
例子
FORI=1TO36
IFARRAY[I]THENEXIT
NEXT
14.IF…THEN
IF…THEN语句是一个选择分支结构。
它有单行和多行两种格式。
1单行IF…THEN语句
单行IF…THEN语句的语法格式为:
IFconditionTHENaction1[ELSEaction2]
其中condition是一条表达式,action1和action2是一条语句。
若是condition结果为TRUE,action1将被执行,不然action2将被执行。
例如:
IFBOOLTHENNUM=1ELSENUM=2
2多行IF…THEN语句
多行IF…THEN语句的语法格式为:
IFcondition1THEN
action1
[ELSEIFcondition2THEN
action2
…]
[ELSE
action3]
ENDIF
其中condition1和condition2是条件表达式,action一、action2和action3是一条或多条语句。
本语句的执行进程为:
计算条件表达式condition1,若是它的结果为TRUE,那么执行action1,然后略过在它后面在ENDIF之前的语句,离开IF...THEN语句;若是condition1的值为FALSE,那么计算条件表达式condition2,若是结果为TRUE,那么执行action2,然后略过在它后面和ENDIF之前的语句,……,若是条件表达式的结果都为FALSE,并存在ELSE子句,那么action3被执行。
例子:
IFBOOL1THEN
NUM=1
ELSEIFBOOL2THEN
NUM=2
ELSE
NUM=3
ENDIF
14.CREATE
CREATE语句生成对象实例变量,在生成以后,能够用点操作符引用对象的成员。
CREATE语句返回一个可在变量中保留的对象实例句柄。
CREATE语句有两种语法格式:
objectvariable=CREATEobjecttype
objectvariable=CREATEUSINGobjecttypestring
objectvariable持有该对象实例,objecttype代表对象类型,objecttypestring是保留需要创建的对象类型名称的字符串。
利用CREATE语句能够创建包括标准类用户对象在内的类用户对象,例如mailSession或Transaction对象。
只是,系统已经为标准用户对象Message、Error、Transaction、DynamicDescriptionArea、DynamicStagingArea提供了一个实例,若是需要多于一个的的实例,能够利用CREATE语句创建更多的实例。
标准数据类型和结构体不用CREATE创建。
当对象的AutoInstantiate属性被设置为TRUE的时候,不需要利用CREATE语句。
可视对象实例不利用CREATE语句创建,而利用OPEN函数。
利用CREATE语句的第二种语法格式能够在应用中动态地选择对象类型,并创建它的实例。
通常在利用继承对象实例初始化先人对象的时候,利用此CREATE语句格式,
利用CREATE语句创建实例对象,在利用完该对象以后,要用DESTROY命令销毁对象实例。
例子:
torusobj1,obj2
torus_ancestorobj_ancestor
obj1=CREATEtorus
obj2=CREATEtorus
obj_ancestor=CREATEUSINGobj1
14.DESTROY
DESTROY语句释放由CREATE创建的实例,释放以后该对象实例不能再被引用。
DESTROY语句的语法格式为:
DESTROYOBJName
需要注意的是,在某些情形之下,用户可能需要销毁自己并未创建的Dwobject或OLEObject对象实例。
其缘故是:
在引用到DataWindow、DWojbect或OLEObject对象的成员函数或属性的时候,POWERBUILDER会动态地创建和释放响应付象实例,可是若是用户自己成立了对嵌入对象的引用,而不是挪用其本身的成员函数和属性的话,等于重载了内部动态对象,因此用户需要负责释放该对象。
14.GOTO
GOTO语句操纵程序流程,其语法格式如下:
GOTOLabel
其中label代表语句标号,其命名应符合标号的命名规那么。
例子:
LABEL1:
NUM++
……
GOTOLABEL1
14.HALT
HALT语句用于终止应用程序的运行。
该语句的语法为:
HALT[CLOSE]
碰到不包括CLOSE选项的HALT语句时,应用程序当即终止。
当包括CLOSE的时候,应用先执行CLOSE事件所对应的处置程序,然后再终止应用程序。
14.RETURN
RETURN语句用于从脚本中返回挪用程序。
其语法格式为:
RETURN[EXPRESSION]
其中EXPRESSION代表该脚本的返回值。
14.3SQL语句
14.CLOSECURSOR
CLOSECURSOR的语法格式为:
CLOSECURSORNAME;
关闭CURSORNAME代表的由OPEN打开的游标,正在利用的游标不能关闭。
通常检索后在SQLCode等于100时利用,在执行该语句后最好检测关闭是不是成功。
14.CLOSEProcedure
CLOSEProdedure语句的语法格式为:
CLOSEProcedureName;
关闭SQL名为ProcedureName的进程,这一语句只能在利用EXECUTE执行了该进程后关闭该进程的时候才能利用。
用户不能对利用USINGTransactionObject子句的事务对象说明的进程利用CLOSE语句。
用户只需要关闭那些返回状态信息的程序,关于那些不返回状态信息或返回状态信息代码为100的程序,POWERBUILDER自动地关闭它们。
14.COMMIT
COMMIT语句的语法格式为:
COMMIT[USINGTransactionObject];
TransactionObject代表自上一次COMMIT、ROLLBACK或CONNECT操作以来的需要永久更新的数据库操作的事物对象的名称。
该子句仅在操纵除默许事务对象(SQLCA)之外的事务对象的需要。
该语句会关闭所有的游标和进程,但可不能引发连接中断。
14.CONNECT
CONNECT语句的语法格式为:
CONNECT[USINGTransactionObject];
TransactionObject代表包括数据库连接信息事务对象名称。
连接默许事务对象SQLCA,在对数据库进行任何的操作之前,必需第一利用CONNECT语句连接数据库。
14.DECLARECursor
DECLARECursor语句的语法格式为:
DECLARECursorNsmeCURSORFORSelectStatement
[USINGTransactionObject];
CursorName代表游标名,能够利用任何有效的POWERBUILDER标识符。
SelectStatement代表SELECT语句。
除利用默许事务对象SQLCA外的事务对象需要利用USINGTransectionObject指明利用的事务对象。
那个语句为指定的事务对象说明一个游标,是一个不可执行语句。
用户能够利用该语句依照与说明变量类似的方式,说明某事务对象的游标。
例如,下面说明了一个名为CUR的游标:
DECLARECURCURSORFOR
SELECT,
FROMdatabase
WHERE>=36;
14.DECLAREProcedure
DECLAREProcedure语句的语法格式为:
DECLAREProcedureNamePROCEDUREFOR
StoredProcedureName
@Praram1=Value1,@Param2=Value2,......
[USINGTransactionObject];
ProcedureName代表进程名,能够利用任何POWERBUILDER同意的标识符,StoredProcedureName代表数据库中保留的进程,@Praram1是StoredProcedureName进程的参数,在@Praram1后的VALUE1是它的初始化值,USINGTransactionObject子句指明引用的事务对象,若是缺省该子句,表示利用默许事务对象SQLCA。
14.DELETE
DELETE删除某事务对象中的表中的数据。
其语法格式为:
DELETEFROMTableNameWHERECriteria
[USINGTransactionObject];
TableName代表将要删除的数据的持有表,Criteria指明删除的标准,USINGTransectionObject指明利用的事务对象,缺省表示利用SQLCA。
删除游标中当前数据和与之对应的表中的数据,能够利用下面的DELETE语句。
DELETEFROMTableNameWHERECURRENTOFCursorName
TableName是持有要删除数据的表的标识符,CursorName是与之对应的游标名。
14.DISCONNECT
DISCONNECT第一执行COMMIT语句,然后与数据库解除连接。
其语法格式为:
DISCONNECT[USINGTransactionObject];
TransactionObject是包括需要接触连接数据库信息的事务对象。
14.EXECUTE
EXECUTE语句执行一个已说明的进程,在那个地址不需要指明事务对象,因为在说明进程时事务对象已经指明。
EXECUTE的语法格式为:
EXECUTEProcedureName;
其中ProcedureName指明要求执行的进程的名字。
14.FETCH
FETCH语句从游标或进程中读取当前的记录,并把它们存储在指定的变量当中。
数据库支持的情形下,用户还能够利用FETCHFIRST、FETCHPRIOR或FETCHLAST语句。
FETCH语句的语法格式为:
FETCHCursorname|ProcedureINTOHostVariableList;
其中HostVariableList代表存储数据库记录的变量列表。
14.INSERT
INSER