数据库原理及应用 ——“十一五”
国家级规划教材 1
第 7章 PowerScript语言
本章重点内容
PowerScript基本概念
变量与常量的数据类型,作用域,声明及引用
PowerScript基本语句的格式要求
函数与结构的定义及引用
嵌入式 SQL的应用数据库原理及应用 ——“十一五”
国家级规划教材 2
7.1.1 标识符
标识符是指在程序中使用的变量,标号,函数,
窗口,控件,菜单及所引用对象的名称 。 在
PowerBuilder8中,标识符的命名遵从下述规则:
标识符必须以英文字母或者下划线,_” 开头 。
标识符不能是保留字 。
标识符只能由字母,数字和如下特殊字符组成:
短划线,-”,下划线,_”,美元符,$”,号码符,#” 和百分号,%” 。
标识符不区分大小写字母 。
标识符不能超过 40个字符,且中间不能出现空格。
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 3
由于 PowerScript允许在标识符中使用短划线,-”,这就使得在使用减号,-”
操作符时,需要在它前后加空格,否则
PowerScript将把表达式当作标识符处理,
出现编译错误 。
标识符命名规则
– 最好使用有一定意义的单词,当同一类标识符有多个时,可以使用两个以上单词的组合,建议用以下方法:
– 使用下划线,_” ( 例如,w_main) 。
– 首字母大写(例如,FirstCount)。
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 4
7.1.2 保留字:保留字不能单独作为一个标识符,但可以作为单词组合的其中一个单词 。
7.1.3 代词代词 引用位置 指代对象
Parent 窗口中的控件用户对象中的控件菜单控件所在的父窗口控件所在的用户对象当前菜单的上一级菜单
This 窗口,用户对象,菜单,应用程序对象,控件 对象或控件本身
ParentWindow 菜单 与菜单相关联的窗口
Super 子对象或控件子窗口或用户对象子窗口或用户对象的控件父对象或控件直系祖先用户对象的直系祖先
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 5
7.1 PowerScript基本概念
7.1.3 代词
1,Parent:
– ( 1) 当为窗口中的控件编写脚本使用 Parent时,
Parent指代包含控件的窗口。
– ( 2)当为用户对象中的控件编写脚本使用 Parent时,
Parent指代用户对象。
– ( 3)当在菜单的脚本中使用 Parent时,它指代上一级菜单。
2,This
– 代表对象或控件本身数据库原理及应用 ——“十一五”
国家级规划教材 6
7.1.3 代词
3,ParentWindow
– 代词 ParentWindow仅能在菜单的脚本中使用,
它代表运行时菜单所在窗口 。
– 注意:用户不能用 ParentWindow来引用父窗口 ( 菜单所在窗口 ) 中的控件 。
4,Super
– 用户可以直接用祖先的名称调用它们,也可以使用代词 Super引用其直系祖先。注意,
不能用 Super调用祖先窗口中的控件的脚本
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 7
7.1.4 空值 (NULL)
空值 (NULL)表示未定义或未知的,它与空字符串,数值零和日期 0000-00-00不同,因为 NULL不是 0或非 0的任何数值 。
空值是 PowerBuilder与数据库交换数据时使用的一种特殊值 。
所有 PowerBuilder变量数据类型都支持空值,即可以给任何类型的数据赋空值,
但不能将空值作为变量的默认初始值 。
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 8
7.1.4 特殊 ASCII字符特殊字符名称 表示方法 ( 符号 )
新行 (NewLine) ~n
制表符 (Tab) ~t
垂直制表 (Vertical Tab) ~v
回车 (Carrige Return) ~r
换页 (Formfeed) ~f
退格 (Backspace) ~b
双引号 (,) ~“
单引号 (‘ ) ~‘
波浪号 (~) ~~
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 9
7.1.4 特殊 ASCII字符
包括上表中所列字符在内,任何 ASCII字符都可以在 ~符号后用它的 ASCII码值表示,ASCII码值可以用十进制 (000-255),
十六进制 (~后接小写的 h,范围 01-FF),
八进制 (~后接小写的 o,范围 000-377)。
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 10
7.1.5 断行,续行和注释
1,语句的断行,续行和分隔
– 分隔符,PowerScript的行分隔符是分号
,;” 。
– 断行:可以加上分隔符表示断行,把多条语句写在一行上 。
– 续行:在语句中间加上续行符,&”,换行后接着书写 。
– 注意:不能在标识符或保留字的中间续行 。
不需要在 SQL 语 句 中 用 续 行 符,因为
PowerBuilder中的 SQL语句总是以分号结束,
编译器认为从 SQL语句开始到分号之间的每一部分都是 SQL语句的组成部分 。
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 11
7.1.5 断行,续行和注释
2,注释
– 行注释:以双斜杠,//” 开始到行结束 。
– 块注释:以,/*” 开始到,*/” 结束。
7.1 PowerScript基本概念数据库原理及应用 ——“十一五”
国家级规划教材 12
7.2 数据类型? 7.2.1 标准数据类型数据类型 意义 示例
Blob 二进制大对象,大小可达到 4 274 767
275字节,用于处理图像,程序或大文本等Boolean 布尔型,布尔型变量只有两个可能值
True或 False
Character(Char) 单个 ASCII字符,A‖
Date 日期型,包括年 ( 1000-3000),月
( 01-12),日 ( 01-31)
2002-08-16
DateTime 日期及时间,仅用于访问数据库的
DateTime型数据
2002- 08- 16
17:30:21
Decimal(Dec) 有符号十进制数,最大 18位宽 123.45
Double 有符号浮点数,精度 15位,范围 2.2E-
308~ 1.7E+308
6.78E+5
Integer(Int) 16位有符号整数,范围 -32768~ +32767 1618
数据库原理及应用 ——“十一五”
国家级规划教材 13
Long 32位 有 符 号 整 数,范围 -
2,147,483,648~ 2,147,483,647
4688165
Real 有符号浮点数,精度 6位,范围 1.7E-
38~ 3.4E+38
3.6E+5
String 字符串类型,用于存储任意 ASCII字符,计算机,,
,abcd‖
Time 24小时时间,包括小时 ( 00-23),分
( 00-59),秒 ( 00-59) 以及秒的小数位 ( 最多 6位 )
12:30:58:12345
6
UnsignedIntege
r(Uint)
16位无符号整数,范围 0~ 65,535 54321
UnsignedLong(
Ulong)
32位 无 符 号 整 数,范围 0 ~
4,294,976,295
54321123
7.2 数据类型
7.2.1 标准数据类型数据库原理及应用 ——“十一五”
国家级规划教材 14
7.2 数据类型
7.2.2 系统对象数据类型
– 在 PowerBuilder应用中,窗口、菜单、各种控件都是系统对象,每一种系统对象实际上是定义在 PowerBuilder内部的一种数据类型。
数据库原理及应用 ——“十一五”
国家级规划教材 15
7.2.3 枚举类型
– 枚举类型是 PowerScript中定义的特殊常量 。
枚举类型通常用来设置对象和控件的属性或者作为系统函数的参数使用 。
– 所有枚举类型的值都是系统预先定义的,不能像其他语言一样可以向定义好的枚举类型集合中添加新的元素,而只能按系统要求使用它。枚举类型实际上一组固定的值,这些值通常以英文单词开始,以,!,结尾来表示其为特殊类型。
7.2 数据类型数据库原理及应用 ——“十一五”
国家级规划教材 16
无论是常量或是变量在使用前都应先声明,
以便编译时分配适当的存储空间,并且声明的格式,位置不同,其作用域和可见性也不同 。
7.3.1 变量
– 变量是指在程序运行过程中可以改变的量 。 在应用中,使用变量前必须先予以声明 。 声明变量的简单语法格式为:
数据类型名 变量名 [ = 初始值 ]
其中,数据类型
变量名为任何合法的标识符
7.3 变量与常量数据库原理及应用 ——“十一五”
国家级规划教材 17
7.3.1 变量
– 声明变量时可以直接把一常量或表达式的值赋给它 (初始化 ),变量初始化是在编译时进行,而不是在运行时完成 。 如果声明变量时不赋初值,系统将按数据类型的默认值自动赋初值
– 可以在同一条语句同时声明多个相同类型的变量,变量之间用逗号 (,)分隔即可 。 语法格式为:
– 数据类型名 变量名 [ = 初始值 ] [,变量名
[ = 初始值 ] ] [,变量名 [ = 初始值 ] ] [,…]
7.3 变量与常量数据库原理及应用 ——“十一五”
国家级规划教材 18
7.3.2 常量
– 常量是在程序运行过程中其值保持不变的量 。
声明常量时需要加关键字 CONSTANT,必须赋初值,并且不能再改变 。
– 常量声明的语法格式为:
CONSTANT 数据类型 常量名 = 值
– 其中常量名一般用大写字母表示,以便将其和变量名区别开来 。
– 注意,声明常量时不能在一行中进行多项声明。
7.3 变量与常量数据库原理及应用 ——“十一五”
国家级规划教材 19
7.3 变量与常量
7.3.3 数组
– 组成数组的变量称为元素,每一个元素都有唯一索引号 (下标 ),用于将其与其它元素区分开来 。 数组有两种类型,即一维数组和多维数组,多维数组的大小必须确定,而一维数组的大小可以确定,也可以不确定 。 数组的每一维最多可包含 147,483,647个元素 。
– 声明数组的语法格式如下:
数据类型 数组名 [[d1,…dn]][={ 初值 }]
数据库原理及应用 ——“十一五”
国家级规划教材 20
7.3.4 变量的作用域
作用域即使用范围,无论是变量还是常量都有自己的作用域
1,全局变量 ( Global)
– 全局变量可以在整个应用程序中被访问,它的作用域是整个应用程序 。 PowerBuilder8中声明全局变量的方法 。
– 为了增强程序的可读性和编码的规范性,全局变量名以字符 g开头,表示该变量为全局变量 (Global)。
2,实例变量 ( Instance)
– 实例变量属于某个对象 (应用程序,窗口,用户对象或菜单 )并与该对象相关联,只有在该对象及与该对象相关的控件的脚本中才能使用其定义的实例变量 。
7.3 变量与常量数据库原理及应用 ——“十一五”
国家级规划教材 21
3,共享变量 ( Local)
– 共享变量和实例变量类似,只能在定义共享变量的对象和与该对象相关的控件的脚本中访问共享变量 。 但是,共享变量与实际的类定义相关联,
而与对象实例无关,这意味着所有同类实例都可共享相同的变量 。
– 共享变量是一种静态变量,将保存其最后的设置,
也就是说,它所在的对象关闭后再次打开时,共享变量依然保持对象关闭时的值 。
4,局部变量 ( Shared)
– 局部变量在使用它的事件或函数中声明,它仅属于声明它的脚本,在该程序段的任何地方均可访问局部变量,但其它程序段不能访问该程序段中的局部变量 。 运行程序后,进入某个程序段时,
自动为该程序段的局部变量分配内存,退出程序段时局部变量占用的内存被释放 。
7.3 变量与常量数据库原理及应用 ——“十一五”
国家级规划教材 22
运算符表示了一个或两个操作数之间的运算操作 。
PowerScript利用运算符构成表达式,完成一定的运算 。
7.4.1 算术运算符运算符 意义 示例
+ 加 C = a + b
- 减 C = a – b 减号两边加空格
* 乘 C = a * b
/ 除 C = a / b
^ 乘方 C = a ^ b a的 b次幂
7.4 运算符与表达式数据库原理及应用 ——“十一五”
国家级规划教材 23
扩展算术运算符运算符 意义 示例 等价形式
++ 增 1 a ++ a = a + 1
-- 减 1 a -- a = a – 1
+= 加等于 a += b a = a + b
-= 减等于 a -= b a = a – b
*= 乘等于 a *= b a = a * b
/= 除等于 a /= b a = a / b
^= 幂等于 a ^= b a = a ^ b
7.4 运算符与表达式数据库原理及应用 ——“十一五”
国家级规划教材 24
7.4.2 关系运算符
7.4 运算符与表达式运算符 含义 示例(假设 a=3,b=4) 结果
= 等于 a = b False
> 大于 a > b False
< 小于 a < b True
运算符 含义 示例(假设 a=3,b=4) 结果
>= 大于等于 a >= b False
<= 小于等于 a <= b True
<> 不等于 a <> b True
数据库原理及应用 ——“十一五”
国家级规划教材 25
7.4.3 逻辑运算符
7.4.4 连接运算符
连接运算符,+”,用于把 Sring型或 Blob
型变量的内容连接起来。
7.4 运算符与表达式运算符 含义 示例
NOT 逻辑反 If NOT a = 10 Then …
AND 逻辑与 If a >10 AND a < 100
Then …OR 逻辑或 If a <10 OR a > 100
Then …
数据库原理及应用 ——“十一五”
国家级规划教材 26
7.4.5 运算符的优先级优先级 运算符 意义
1(最高 ) ( ) 括号
2 +,- 一元运算符
3 ^ 幂运算
4 *,/ 乘,除
5 +,- 加减及连接运算
6 =,>,<,>=,<=,<> 关系运算
7 NOT 逻辑反
8 AND 逻辑与
9(最低 ) OR 逻辑或数据库原理及应用 ——“十一五”
国家级规划教材 27
7.4.6 表达式
表达式是由算术运算符,关系运算符及逻辑运算符连接起来的变量,常量构成的语法单位 。
数值数据类型转换级别级别 数据类型
1(最高 ) double
2 Real
3 decimal
4 unsignedlong,long
5(最低 ) unsignedinteger,integer
7.4 运算符与表达式数据库原理及应用 ——“十一五”
国家级规划教材 28
7.5.1 赋值语句
语法格式为:
– variablename = expression
– 其中,variablename代表变量名,expression代表表达式,
也可以是字符串,数字,变量或常量以及数组等 。
在赋值语句中,若等号右边是表达式,则先将其结果转化为等号左边变量的类型后,再赋值给变量 。
注意:因为等号,=,在表达式中可以作为关系运算符,所以在赋值语句中,不能实现连续赋值。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 29
7.5.2 条件控制语句
1,IF… THEN语句
( 1) 单行 IF… THEN语句
语法格式为,IF condition THEN action1 [ELSE action2]
( 2) 多行 IF… THEN语句
语法格式为:
– IF condition1 THEN
Action1
[ELSEIF condition2 THEN
Action2]
[ELSE
Action3]
END IF
多行 IF…THEN 语句即使只有 action1一个语句块,也需要
END IF表示多行 IF…THEN 的结束。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 30
2,CHOOSE CASE语句
适用于多分支选择结构 。 语法格式为:
CHOOSE CASE testexpression
CASE expressionlist
statementblock
[CASE expressionlist
statementblock

CASE expressionlist
statementblock]
[CASE ELSE
statementblock]
END CHOOSE
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 31
2,CHOOSE CASE语句
其中,testexpression代表测试值,expression代表判断表达式,statementblock代表测试值与判断表达式相匹配时执行的语句块,方括号里的内容可以省略 。
判断表达式可以有如下几种形式:
– ( 1) 用逗号分隔一组数据 。
– ( 2) 用 TO表示一个区间 。
– ( 3) 用 IS代表测试值,与关系运算符一起构成关系表达式
– ( 4) 用前三种形式的组合,用逗号进行分隔 。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 32
2,CHOOSE CASE语句
– 在 CHOOSE CASE语句中,至少应包含一个 CASE子句,并且由 END CHOOSE结束。
执行 CHOOSE CASE语句时,PowerScript将逐条查找 CASE子句,如果找到与测试值相匹配的判断表达式,就执行该 CASE子句中的语句块,然后执行 END CHOOSE的后继语句。如果包含 CASE ELSE子句,那么在未找到任何匹配的判断表达式时,执行
CASE ELSE子句中的语句块。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 33
7.5.3 循环控制语句
1,DO… LOOP语句
( 1) DO UNTIL condition… LOOP语法格式为:
DO UNTIL condition
Statementblock
LOOP
执行过程为:先判断控制条件 condition,如果为 false,则执行语句块 statementblock,执行到
LOOP后,接着判断条件 condition,直到结果为 true时结束循环。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 34
( 2) DO WHILE condition… LOOP的语法格式:
DO WHILE condition
Statementblock
LOOP
执行过程为:先判断控制条件 condition,如果为 true,
则执行语句块 statementblock,执行到 LOOP后,接着判断条件 condition,直到结果为 false时结束循环 。
( 3) DO… LOOP UNTIL condition的语法格式:
DO
Statementblock
LOOP UNTIL condition
执行过程为:先执行语句块 statementblock,然后判断控制条件 condition,如果为 false,则继续执行语句块
statementblock,直到 condition的结果为 true时结束循环。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 35
( 4) DO… LOOP WHILE condition的语法格式为:
DO
Statementblock
LOOP WHILE condition
执行过程
– 先执行语句块 statementblock,然后判断控 制条件
condition,如 果 为 true,则 继 续 执 行 语 句 块
statementblock,直到 condition的结果为 false时结束循环 。
四种循环结构比较
– 前两种结构是先判断条件,再执行循环体,所以有可能开始时条件就不满足,从而使得循环体一次都不能得以执行;后两种结构是执行一次循环体后再判断条件,所以至少可以执行一次循环体。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 36
2,FOR… NEXT语句语法格式为:
FOR varname = start TO end [STEP increment]
Statementblock
NEXT
3,GOTO语句
GOTO语句的语法格式为:
GOTO label
其中,label是语句标号,它使用标识符的命名规则,语句标号可以出现在程序的任何位置,
但必须在一行语句的最前面,并且后面要跟冒号。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 37
4,循环嵌套
– 循环嵌套是指把一个循环放在另一个循环的循环体中 。
5,EXIT语句
– EXIT语句是中途结束循环的语句 。 注意:
如果在循环嵌套中使用 EXIT语句,那么执行 EXIT语句只能退出当前层的循环,而不能退出所有循环 。
6,CONTINUE语句
– CONTINUE语句控制循环的执行使之返回循环开始处。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 38
7.5.4 其它语句
1,CALL语句
– CALL语句在继承对象中调用祖先对象的脚本 。 语法格式为:
CALL ancestorobjectname [`controlname]::event
– 其中,ancestorobjectname是指祖先对象名,方括号里的内容表示可以省略,controlname是指祖先对象中的控件名,
event是指祖先对象中的事件名 。
2,RETURN语句
– RETURN语句用于立即终止脚本或函数的执行并返回调用程序 。 其语法格式为:
RETURN [expression]
– 其中,expression表示函数的返回值,方括号内的内容可以省略 。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 39
3,HALT语句
– HALT语句用于终止应用程序的运行 。 其语法格式为:
HALT [CLOSE]
– 其中 CLOSE为可选项,当遇到不包含 CLOSE的 HALT语句时,将立即终止应用程序的运行,如果遇到包含
CLOSE的 HALT语句,则先执行应用对象的 CLOSE事件中的脚本,然后终止应用程序 。
4,CREATE语句
– CREATE语句用于创建对象实例 。 语法格式有两种:
– 语法一,Objectvariable = CREATE objecttype
其中,Objectvariable表示返回的句柄,即与创建的对象实例类型相同的变量 。 Objecttype表示所创建对象的类型 。
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 40
4,CREATE语句
– 语法二,Objectvariable = CREATE USING objecttypestring
– 其中,Objectvariable表示返回的句柄,即与创建的对象实例类型相同的变量 。 Objecttypestring表示要创建对象类型名称的字符串 。
– 注意,CREATE语句用于创建非可视对象,可视对象的实例使用 OPEN函数打开,标准数据类型和结构体不用
CREATE语句创建,当对象的 AutoInstantiate属性被设置为 TRUE时不需要使用 CREATE语句 。
5,DESTROY语句
– DESTROY语句用于释放由 CREATE语句创建的实例 。 语法格式为:
DESTROY Objectvariable
– 其中,Objectvariable表示对象实例变量
7.5 基本语句数据库原理及应用 ——“十一五”
国家级规划教材 41
7.6.1 MessageBox( )函数
使用 MessageBox( )函数可以向用户显示或提示各种信息 。 语法如下:
MessageBox ( title,text [,icon [,button
[,default ] ] ] )
title是一个被用来确定 MessageBox标题的字符串 。
text是在 MessageBox中显示的文本 。
icon用来指示显示在 MessageBox左侧的图标 。
可选的值有 Information! StopSign!、
Exclamation!,Question!,None!。
7.6 常用标准函数数据库原理及应用 ——“十一五”
国家级规划教材 42
button用来指示你想要显示的命令按钮的集合 。
这些值是 OK!,OKCancel!,YesNo!、
YesNoCancel!,RetryCancel!、
AbortRetryIgnore!。 返回值只有 1,2,3和 -1,
分别表示用户的按键和失败的情况 。 默认值是
OK!。
default指定默认的按钮
举例
messagebox("提示 ","你好 ",StopSign!,OKCancel!,2)
T i t l e 标题
I c o n 图标
T e x t 文本
B u t t o n 按钮
D e f a u l t 默认按钮
7.6 常用标准函数数据库原理及应用 ——“十一五”
国家级规划教材 43
7.6.2 Open ()函数和 close()函数
Open( )函数用来打开一个窗口,而 Close( )函数用来关闭一个窗口。语法格式为:
Open(w_name)
Close(w_name)
参数 w_name指窗口的名称,函数的返回值是一个整数,函数调用成功则返回 1,否则返回 -1。
Open函数在打开窗口的同时,也调用了该窗口的 Open事件。 Close函数关闭窗口并释放该窗口和窗口中所有控件占据的系统资源。
7.6 常用标准函数数据库原理及应用 ——“十一五”
国家级规划教材 44
7.6.3 数据类型检查函数
数据类型检查函数又称为 Is簇函数它们用来判断一个字符串是否符合某种数据类型的格式,返回值是一个布尔类型的值 。 Is簇函数的语法格式为:
Is*(string)
– 其中 string为要测试的字符串 。
IsNumber( )用于测试某字符串是否为有效数值 。
IsDate( )检测指定的字符串是否包含有效日期 。
IsTime( ) 检测指定的字符串是否包含有效时间 。
IsNull ( )测试某变量或表达式的值是否为 Null。
7.6 常用标准函数数据库原理及应用 ——“十一五”
国家级规划教材 45
7.6.4 数据类型转换函数
Integer(string) 将字符串转化为整形
Long(string ) 将字符串转化为长整形
Real(string) 将字符串转化为实形
Double(string) 将字符串转化为双精度形
Dec(string)
String( ) 各种不同的数据类型转化为字符串
7.6 常用标准函数数据库原理及应用 ——“十一五”
国家级规划教材 46
7.6.5 Run( )函数
调用 Run( ) 函数可以在 PowerBuilder应用程序中运行其它的应用程序 。 语法格式为:
Run(Program [,state] )
其中参数 Program是一个字符串,指定要运行的程序名称 。
7.6 常用标准函数数据库原理及应用 ——“十一五”
国家级规划教材 47
7.7.1 自定义函数
参数的传递方式有以下三种:
– Value —— 表示值传递,将实际参数的值传递给函数 。
– Reference——地址传递,把实际参数的地址传递给函数,如果函数修改了形式参数的值,则实际参数的值也就被修改了 。
– Readonly——只读地址传递,把实际参数的地址传递给函数,但不允许修改参数的值 。
7.7 自定义函数和结构数据库原理及应用 ——“十一五”
国家级规划教材 48
1.自定义全局函数
– ( 1) 选择 File→ New菜单项,或在工具栏中单击 New图标,打开 New对话框,单击 PB
Object选项卡 。
– ( 2)选择 Function图标,然后单击 OK按钮,
或者直接双击该图标,打开 Function画板
7.7 自定义函数和结构单击该图标按钮,将显示 / 隐藏错误提示单击该图标按钮,将显示 / 隐藏函数原型函数原型代码区域错误提示数据库原理及应用 ——“十一五”
国家级规划教材 49
– ( 3)在 Function Name项中输入函数名,自定义全局函数的命名一般用,f_‖开头,命名规则即标识符的命名规则;在 Return Type
下拉列表框中选择函数的返回值类型,如果函数没有返回值,则选择,[None]‖项;在
Pass By下拉列表框中选择参数传递方式;在
Argument Type下拉列表框中选择参数类型;
在 Argument Name项中输入参数名(即形式参数,简称形参),命名规则即标识符的命名规则。
– ( 4)编写完函数脚本后可以编译并保存该函数。
7.7 自定义函数和结构数据库原理及应用 ——“十一五”
国家级规划教材 50
2,自定义对象函数
– 自定义对象函数与某对象相联系,是为具体的对象 (如窗口,菜单,用户对象或应用程序 )而定义的,
它是这些对象的一部分,与对象保存在一起 。
– 自定义对象函数的访问级别可以改变,有三个级别分别为:
Public——可以在应用程序的任何脚本中调用该函数
Private——只能在定义该函数的对象脚本中才能调用该函数,不能在该对象的后代脚本中调用该函数 。
Protected——可以在该函数的对象以及它的后代的脚本中调用该函数 。
– 调用自定义对象函数时,如果在对象中调用,则可直接调用,如果在对象外调用,必须在函数名前指定对象名。
7.7 自定义函数和结构数据库原理及应用 ——“十一五”
国家级规划教材 51
7.7.2 结构
1,全局结构
– 全局结构,在应用程序的任何地方都可以访问的结构 。 全局结构作为独立的对象存放在库中 。
创建过程
( 1) 选择 File→ New菜单项,或在工具栏中单击 New图标,打开 New对话框,单击 PB Object选项卡 。
( 2) 选择 Structure图标,然后单击 OK按钮,或者直接双击图标,打开 Structure画板
输入域变量
2,对象结构
– 对象结构是在具体的对象 (如窗口、菜单、用户对象或应用程序 )中定义的,它是这些对象的一部分,
与对象保存在一起。与函数不同的是不能为结构定义访问级别,一般只能在对象内使用,或当该对象打开时,可以在其它对象脚本中使用该结构。
7.7 自定义函数和结构数据库原理及应用 ——“十一五”
国家级规划教材 52
如果需要在程序中连接数据库就必须通过嵌入式 SQL来完成,有时候我们需要在程序中直接使用 SQL语句操作数据库 。 PowerScript提供了一整套嵌入式 SQL语句 。
PowerScript支持在程序中使用嵌入式 SQL语句,
并且支持在 SQL语句中使用具体数据库管理系统 ( DBMS) 特有的 SQL语句,函数和保留字,
实际上,对于 SQL语句,PowerBuilder在将其发送到 DBMS之前,并不做任何处理,而由
DBMS完成相应操作,最后 PowerBuilder得到处理结果 。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 53
PowerBuilder中嵌入 SQL语句的要求
– 整个 SQL语句可以写在一行,也可以写成更清晰易懂的多行格式,不需使用断行续行符,
只要在整个语句结束处加上一个分号(;)
即可。在 SQL语句中可以使用常量或合法的变量,但使用变量时须在变量前加个冒号
(:)(通常称做绑定变量),多个变量或常量之间用逗号(,)分隔。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 54
7.8.1 数据库连接的建立与断开
1,使用 CONNECT建立与数据库的连接
– CONNECT是每个访问数据库的 PowerBuilder程序必须使用的语句,它的功能是通过事务对象将应用程序与数据库建立连接,连接成功后,其它 SQL
语句和数据窗口才能通过事务对象对数据库进行操作 。
– CONNECT语句的语法格式为:
CONNECT [USING TransactionObject];
– 其中,TransactionObject是事务对象,在执行该语句前,必须正确设置事务对象的数据库连接属性。
方括号( [ ])表示该成分可以省略,省略时使用默认的事务对象 SQLCA。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 55
7.8.1 数据库连接的建立与断开
2,使用 DISCONNECT断开与数据库的连接
– DISCONNECT语句断开与数据库的连接,
执行该语句时,它首先执行 COMMIT语句
( 事务提交语句 ),完成事务提交,然后断开与数据库的连接 。
– DISCONNECT语句的语法格式为:
DISCONNECT [USING TransactionObject];
– 其中,TransactionObject是前面用
CONNECT语句连接的事务对象名。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 56
7.8.2 提交与回滚事务
1,提交事务语句 COMMIT
– COMMIT语句提交事务,完成数据库的物理修改 。
执行该语句后,将关闭所有先前打开的游标
( CURSOR) 和过程 ( PROCEDURE),并开始一个新的事务 。 COMMIT语句的语法格式为:
– COMMIT [USING TransactionObject];
– 其中,TransactionObject是事务对象名,缺省时使用事务对象 SQLCA。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 57
7.8.2 提交与回滚事务
2,回滚事务语句 ROLLBACK
– ROLLBACK( 回滚 ) 语句放弃自上一个 COMMIT、
ROLLBACK或 CONNECT语句以来的所有数据库操作,关闭所有的游标和过程,并开始一个新的事务 。
其语法格式为:
ROLLBACK [USING TransactionObject] ;
– 其中,TransactionObject是事务对象名,缺省时使用事务对象 SQLCA。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 58
7.8.3 单行检索语句 SELECT
单行 SELECT语句从数据库中检索一条记录,如果找到多条满足条件的记录,则产生错误( 7.8.7节将介绍读取多条数据库记录的游标方法)。其语法格式为:
SELECT 字段名列表
INTO 变量列表
FROM 表名列表
WHERE 检索条件
[USING 事务对象名 ];
其中,字段名列表包含多个字段时字段之间用逗号分隔,
多个表时,用“表名,字段名”区分不同表中的同名字段;
变量列表中每个变量前都要加上冒号(,),以指示该变量是 PowerScript变量(这类变量称作主变量或绑定变量);
表名列表中多个表名之间用逗号分隔。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 59
7.8 嵌入式 SQL语句
7.8.3 单行检索语句 SELECT
例如,下面的语句从发票表 fp选择 ssdw(所属单位)
和 fhdw(发货单位)列的内容,并将结果存放在两个单行编辑框中,其条件是发票号 fpno=1。注意 SELECT
语句使用了开发人员说明的事务对象 Emp_tran而不是缺省事务对象 SQLCA:
SELECT fp.ssdw,fp.fhdw
INTO,sle_ssdw.text,:sle_fpno.text
FROM fp
WHERE fp.fpno = 1;
数据库原理及应用 ——“十一五”
国家级规划教材 60
7.8 嵌入式 SQL语句
7.8.4 插入语句 INSERT
INSERT语句向数据库中插入一条记录,其语法格式为:
INSERT INTO 表名 (列名 [,...])
VALUES (列值 [,...])
[USING 事务对象名 ] ;
其中,列值为列的赋值,程序中可以使用常量,也可以使用绑定 变量( PowerScript变量前加个冒号)。例如,下面的语句在 kpr表中插入一行并设置用户名和密码:
String username //用户名
string password //密码
,..
INSERT INTO kpr (kpr.id,kpr.pass)
VALUES (:username,:password) ;
例子中省略了 USING子句,表示该插入语句使用 SQLCA事务对象。
数据库原理及应用 ——“十一五”
国家级规划教材 61
7.8 嵌入式 SQL语句
7.8.5 删除语句 DELETE
使用 DELETE语句删除表中的数据,其语法格式为:
DELETE FROM 表名
WHERE 删除条件
[USING 事务对象名 ] ;
其作用为满足删除条件的行被删除。
数据库原理及应用 ——“十一五”
国家级规划教材 62
7.8 嵌入式 SQL语句
7.8.6 修改语句 UPDATE
UPDATE语句修改表中指定的数据,其语法格式为:
UPDATE 表名
SET 列名 =值 [,列名 = 值 [,...]]
WHERE 修改条件
[USING 事务对象名 ] ;
其中,值可以是常量,也可以是 PowerScript的绑定变量( PowerScript变量前加个冒号);该语句的作用为满足该修改条件的行被修改。
数据库原理及应用 ——“十一五”
国家级规划教材 63
7.8.7 检查 SQL语句的执行情况
每当执行一条 SQL语句后,与该语句相关的事务对象的 SQLCode属性都给出一个值指示 SQL
语句的执行是否成功,SQLCode取值为:
– 0,最近一次 SQL语句执行成功
– -1,最近一次 SQL语句执行失败
– 100:最近一次 SQL语句没有返回数据
当 SQLCode的值为 -1时(即最近一次 SQL语句执行失败时),事务对象的 SQLDBCode属性中存放着数据库厂商提供的错误代码、事务对象的 SQLErrText属性中存放着数据库厂商提供的错误信息,利用这两个属性,可以得到出错原因。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 64
SELECT fp.shdw,fp.fhdw
INTO,sle_ssdw.text,:sle_fhdw.text
FROM fp
WHERE fp.fpno =,sle_fpno;
if sqlca.SQLCode = 100 then //未找到满足条件的数据
MessageBox("查询发票 ","未找到指定的发票 ")
elseif sqlca.SQLCode < 0 then //SELECT语句执行不成功
MessageBox("数据库错误 ",&sqlca.SQLErrText,
Exclamation!)//出错信息
End If
7.8 嵌入式 SQL语句
7.8.7 检查 SQL语句的执行情况实例数据库原理及应用 ——“十一五”
国家级规划教材 65
7.8.8 游标操作 ( 读取多行数据 )
当需要读取多条记录时,就需要使用游标进行操作 。 其典型运用过程一般为:
( 1) 用 DECLARE声明游标;
( 2) 用 OPEN语句打开游标;
( 3) 使用 FETCH语句读取一行数据;
( 4) 处理数据;
( 5) 判断是否已经读完所有数据,未读完时重复执行 ( 3) ~ ( 5) 步;
( 6)使用 CLOSE语句关闭游标。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 66
1,DECLARE语句
使用游标前需要用 DECLARE语句声明游标,
其语法格式为:
DECLARE CursorName CURSOR FOR
SelectStatement
[USING TransactionObject];
其中,CursorName是游标的名称,可以使用任何有效的标识符来表示; SelectStatement是任何有效的 SELECT语句; TransactionObject
是事务对象名,缺省时使用 SQLCA。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 67
2,OPEN语句
OPEN 语句打开已经声明的游标并执行相应的
SELECT语句 。 其语法格式为:
OPEN CursorName;
其中 CursorName是已经用 DECLARE语句声明的游标名。
3,FETCH语句
FETCH语句从游标中读取当前记录并把它保存到指定的变量中 。 当数据库支持下述用法时,还可以使用
FETCH FIRST,FETCH PRIOR,FETCH LAST。
FETCH语句的语法格式为:
FETCH CursorName INTO HostVariableList;
其中 CursorName是 OPEN语句打开的游标名,
HostVariableList是与 SELECT语句中选择字段相对应的绑定变量列表。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 68
4,CLOSE语句
CLOSE语句关闭先前打开的游标 。 其语法格式为:
CLOSE CursorName ;
其中 CursorName是先前打开游标的名称 。
关闭游标后,就不能再使用 FETCH语句从游标中读取数据了。
7.8 嵌入式 SQL语句数据库原理及应用 ——“十一五”
国家级规划教材 69
7.9 编写脚本
无论为哪个对象编写脚本,都应包括如下几个步骤:打开脚本视图区,编写脚本,编译脚本后保存 。
在为对象编写脚本时,可以使用 PowerBuilder
提供的工具对脚本所需的变量,函数,结构以及语句等直接进行粘贴,从而提高程序开发的准确性和开发效率 。
7.9.1 打开脚本视图区
7.9.2 粘贴脚本
7.9.3 编译脚本
7.9 编写脚本数据库原理及应用 ——“十一五”
国家级规划教材 70
7.10 应用程序的调试
调试应用程序的一般步骤如下:
( 1)打开调试器( Debug) ;
( 2)在应用程序中设置断点( BreakPoint) ;
( 3)在调试状态下运行应用程序;
( 4)当执行到断点处程序挂起时,查看或改变有关变量的值;
( 5)如有必要,逐行单步运行代码;
( 6)根据需要,在运行过程中添加或修改断点;
( 7)当发现错误时,纠正错误代码。
7.10.1 调试窗口矢量视图区源代码视图区观察变量视图区对象浏览视图区
7.10.1 调试窗口
画板工具栏开始启动远程调试执行到光标 停止调试继续单步进入单步执行单步跳出设置下一条语句选择脚本编辑断点添加查看变量删除查看变量关闭调试器数据库原理及应用 ——“十一五”
国家级规划教材 73
7.10.2 断点设置
1.选择代码
在开始调试之前,首先要选择想跟踪调试哪一段代码,选中的代码将显示在源代码视图区。
选择代码的方法有两种:
展开对象浏览区中的对象,直至出现想调试代码的对象图标。双击该图标或相应函数名/事件名,相应代码显示在源代码区中。
选择菜单 【 Edit】 | 【 Select Script】,打开
Select Script对话框,展开要调试的对象,直至找到要调试的函数或事件名,如图 7-26所示。
双击该名称或选择该名称后单击 【 OK】 按钮,
指定代码显示在源代码区中。
数据库原理及应用 ——“十一五”
国家级规划教材 74
7.10.2 断点设置
2.设置断点
选择了要跟踪、调试的代码后,就可以在该代码中设置断点了。断点是这样的程序行:在调试模式下,程序执行到该行后暂时停下来,此时能够查看对象属性、各种变量的取值以及修改取值等,由此判断程序是否按照预期效果运行,从而查出出错原因。
设置断点的方法很简单,在源代码视图区中找到要设置断点的行,双击该行或右击该行,在弹出菜单中选择 【 Insert Breakpoint】 命令,当前行前面就出现一个断点标志 —棕色的圆点。
数据库原理及应用 ——“十一五”
国家级规划教材 75
7.10.2 断点设置
3.清除断点
当某个断点不需要时,随时可以清除断点,方法是:
在源代码视图区中找到该断点所在行,双击该行或右击该行,在弹出菜单中选择 【 Clear Breakpoint】 命令。
注释:如果不想清除断点,而想让该断点不起作用,
可以用鼠标右击该断点所在的行,在弹出菜单中选择
【 Disable Breakpoint】 命令,此时,断点标志变为小圆圈,程序调试过程中,该行就好像没有设置断点一样。对暂时不起作用的断点,想使其恢复断点功能,
只需右击该行,在弹出菜单中选择 【 Enable
Breakpoint】 命令即可。
数据库原理及应用 ——“十一五”
国家级规划教材 76
7.10.2 断点设置
4.编辑断点
除了前面介绍的设置断点方法外,通过编辑断点也可以控制程序在什么状态下进入中断模式,
这就提供了更灵活的调试程序的能力,比如希望当某变量的值变化时进人中断模式等。想编辑断点时,可选择菜单 【 Edit】 |
【 Breakpoint】,打开如图 7-28所示的 Edit
Breakpoint对话框。
数据库原理及应用 ——“十一五”
国家级规划教材 77
7.10.2 断点设置数据库原理及应用 ——“十一五”
国家级规划教材 78
7.10.3 调试状态下应用程序的跟踪运行
1.运行到下一个断点
对大的代码段或较长的循环来说,逐步跟踪往往不太现实,为了加快调试进程,可让程序直接执行到下一断点。方法为:单击调试器画板工具栏上的 【 Continue】 图标或直接按 Ctrl十 C
组合键。
2.单步执行
单步执行可以逐行查看应用程序的运行结果。
PowerBuilder的调试器提供了 3种单步执行方式:
单步进人 (Step In)、单步执行 (Step Over)、单步跳出 (Step Out)。
数据库原理及应用 ——“十一五”
国家级规划教材 79
7.10.3 调试状态下应用程序的跟踪运行
3.执行到光标处
在调试程序时,如果需要了解当前光标位置语句的执行情况,可以使用调试器的“执行到光标处”功能,方法为:将光标定位在欲查看执行情况的语句上,单击调试器画板工具栏上的
“执行到光标处”图标,或选择菜单
【 Debug】 | 【 Run to Cursor】 。程序运行到光标所在行后,进人中断模式,此时可以查看变量、属性的值,也可以使用单步跟踪方式逐条执行语句。
数据库原理及应用 ——“十一五”
国家级规划教材 80
7.10.3 调试状态下应用程序的跟踪运行
4.增加与删除观察变量
为了便于观察变量取值的情况,可以把需要经常查看的变量或属性放到观察变量视图区中,这样就不会受其他变量或属性的干扰了。若要向观察变量视图区增加变量或属性,应首先在变量视图区找到希望查看其取值的变量,然后将该变量从变量视图区拖曳到观察变量视图区,或右击该变量后从弹出菜单中选择 【 Add Watch】,或选择变量后单击调试器画板工具栏上的 【 Add watch】 图标。
在观察变量视图区中还可以观察表达式的取值,首先在观察变量视图区中右击,在弹出菜单中选择 【 Insert】,系统打开如图 7-28所示的 New
Expression对话框。然后在 Expression编辑框中键入所需的表达式,该表达式可以是任何有效的 PowerBuilder表达式。
对添加到观察变量区中的变量,随时都可以将其从观察变量区中删除。方法为:右击要删除的变量,从弹出的菜单中选择 【 C1ear】 命令;要删除观察变量区中的所有变量,只需从弹出菜单中选择 【 C1ear All】 命令即可。
数据库原理及应用 ——“十一五”
国家级规划教材 81
7.10.3 调试状态下应用程序的跟踪运行
5.修改变量取值
在调试过程中,开发人员可根据需要临时改变变量的取值,比如,想少执行几次循环等。修改变量取值的方法是:首先在矢量视图区或
Watch标签页双击要修改其值的变量,则系统显示如图 7-29所示的 Modify Variable对话框。
想将其取值修改为新值时,在 New Value编辑框中键入新值即可;想将新值设置为空值 (Null)
时,要选中 Null复选框。
数据库原理及应用 ——“十一五”
国家级规划教材 82
本章小结
本章主要介绍了编写 PowerScript脚本语句的语法规则和脚本涉及到的相关内容。脚本中的有效标识符要以英文字母或者下划线,_‖开头、
由字母、数字和,-‖ ―_‖ ―$‖ ―#‖ ―%‖这些特殊字符组成,标识符不区分大小写字母,不能超过 40个字符,且中间不能出现空格。保留字是
PowerBuilder内部使用的一组单词,它们不能作为标识符来使用。代词可以引用对象或控件而不用指定它们的名称。空值 (NULL)表示未定义或未知的数值。 PowerBuilder中的数据类型有标准数据类型、系统对象数据类型、任意数据类型和枚举类型。变量在使用前应先声明,
以便编译时分配适当的存储空间,并且声明的格式、位置不同,其作用域和可见性也不同。表达式由算术运算符、关系运算符及逻辑运算符连接起来的变量、常量构成,构成表达式的各类运算符有不同的优先级。用于控制程序的流程的基本是语句赋值语句、条件控制语句和 循环控制语句及常用的其它语句(如,call,return等)。各种标准函数和自定义函数的函数参数及其用法。结构是指多个相关变量的集合,这些变量可以具有相同的数据类型,也可以具有不同的数据类型。