PowerScript语言

上传人:xia****ian 文档编号:244846361 上传时间:2024-10-06 格式:PPT 页数:72 大小:266.50KB
返回 下载 相关 举报
PowerScript语言_第1页
第1页 / 共72页
PowerScript语言_第2页
第2页 / 共72页
PowerScript语言_第3页
第3页 / 共72页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,*,数据库原理及开发,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第9章 PowerScript语言,本章重点内容,PowerScript,基本概念,变量与常量的数据类型、作用域、声明及引用,PowerScript,基本语句的格式要求,函数与结构的定义及引用,嵌入式,SQL,的应用,2024/10/6,1,数据库原理及开发,9.1.1 标识符,标识符是指在程序中使用的变量、标号、函数、窗口、控件、菜单及所引用对象的名称。在,PowerBuilder8,中,标识符的命名遵从下述规则:,标识符必须以英文字母或者下划线“_”开头。,标识符不能是保留字。,标识符只能由字母、数字和如下特殊字符组成:短划线“-”,下划线“_”,美元符“$”,号码符“#”和百分号“%”。,标识符不区分大小写字母。,标识符不能超过40个字符,且中间不能出现空格。,9.1 PowerScript基本概念,2024/10/6,2,数据库原理及开发,由于,PowerScript,允许在标识符中使用短划线“-”,这就使得在使用减号“-”操作符时,需要在它前后加空格,否则,PowerScript,将把表达式当作标识符处理,出现编译错误。,标识符命名规则,最好使用有一定意义的单词,当同一类标识符有多个时,可以使用两个以上单词的组合,建议用以下方法:,使用下划线“_”(例如:,w_main)。,首字母大写(例如:,FirstCount)。,9.1 PowerScript基本概念,2024/10/6,3,数据库原理及开发,9.1.2 保留字:保留字不能单独作为一个标识符,但可以作为单词组合的其中一个单词。,9.1.3 代词,代词,引用位置,指代对象,Parent,窗口中的控件,用户对象中的控件,菜单,控件所在的父窗口,控件所在的用户对象,当前菜单的上一级菜单,This,窗口、用户对象、菜单、应用程序对象、控件,对象或控件本身,ParentWindow,菜单,与菜单相关联的窗口,Super,子对象或控件,子窗口或用户对象,子窗口或用户对象的控件,父对象或控件,直系祖先,用户对象的直系祖先,9.1 PowerScript基本概念,2024/10/6,4,数据库原理及开发,9.1 PowerScript基本概念,9.1.3 代词,1,Parent:,(1),当为窗口中的控件编写脚本使用,Parent,时,,Parent,指代包含控件的窗口。,(2)当为用户对象中的控件编写脚本使用,Parent,时,,Parent,指代用户对象。,(3)当在菜单的脚本中使用,Parent,时,它指代上一级菜单。,2,This,代表对象或控件本身,2024/10/6,5,数据库原理及开发,9.1.3 代词,3ParentWindow,代词,ParentWindow,仅能在菜单的脚本中使用,它代表运行时菜单所在窗口。,注意:用户不能用,ParentWindow,来引用父窗口(菜单所在窗口)中的控件。,4,Super,用户可以直接用祖先的名称调用它们,也可以使用代词,Super,引用其直系祖先。注意,不能用,Super,调用祖先窗口中的控件的脚本,9.1 PowerScript基本概念,2024/10/6,6,数据库原理及开发,9.1.4 空值(,NULL),空值(,NULL),表示未定义或未知的,它与空字符串、数值零和日期0000-00-00不同,因为,NULL,不是0或非0的任何数值。空值是,PowerBuilder,与数据库交换数据时使用的一种特殊值。,所有,PowerBuilder,变量数据类型都支持空值,即可以给任何类型的数据赋空值,但不能将空值作为变量的默认初始值。,9.1 PowerScript基本概念,2024/10/6,7,数据库原理及开发,9.1.4 空值(,NULL),给变量赋空值的途径有两条:,从数据库中读到空值。,用,SetNull,函数赋值。,测试变量或表达式的值是否为空值应该调用,IsNull( ),函数,而不是用等号。,9.1 PowerScript基本概念,2024/10/6,8,数据库原理及开发,9.1.5,特殊,ASCII,字符,特殊字符名称,表示方法(符号),新行(,NewLine),n,制表符(,Tab),t,垂直制表(,Vertical Tab),v,回车(,Carrige Return),r,换页(,Formfeed),f,退格(,Backspace),b,双引号(“),“,单引号(),波浪号(),9.1 PowerScript基本概念,2024/10/6,9,数据库原理及开发,9.1.5,特殊,ASCII,字符,包括上表中所列字符在内,任何,ASCII,字符都可以在,符号后用它的,ASCII,码值表示,,ASCII,码值可以用十进制,(000-255),,十六进制,(,后接小写的,h,,,范围,01-,FF),,,八进制,(,后接小写的,o,,,范围,000-377),。,9.1,PowerScript,基本概念,2024/10/6,10,数据库原理及开发,9.1.6 断行、续行和注释,1语句的断行、续行和分隔,分隔符:,PowerScript,的行分隔符是分号“;”。,断行:可以加上分隔符表示断行,把多条语句写在一行上。,续行:在语句中间加上续行符“&”,换行后接着书写。,注意:不能在标识符或保留字的中间续行。不需要在,SQL,语句中用续行符,因为,PowerBuilder,中的,SQL,语句总是以分号结束,编译器认为从,SQL,语句开始到分号之间的每一部分都是,SQL,语句的组成部分。,9.1,PowerScript,基本概念,2024/10/6,11,数据库原理及开发,9.1.6 断行、续行和注释,2注释,行注释:以双斜杠“/”开始到行结束。,块注释:以“,/*,”开始到“,*/,”结束。,9.1,PowerScript,基本概念,2024/10/6,12,数据库原理及开发,9.2 数据类型,9.2.1,标准数据类型,数据类型,意义,示例,Blob,二进制大对象,大小可达到4 294 967 295字节,用于处理图像、程序或大文本等,Boolean,布尔型,布尔型变量只有两个可能值,True,或,False,Character(Char),单个,ASCII,字符,“,A”,Date,日期型,包括年(1000,-,3000)、月(01,-,12)、日(01,-,31),2002-08-16,DateTime,日期及时间,仅用于访问数据库的,DateTime,型数据,2002-08-16 19:30:21,Decimal(Dec),有符号十进制数,最大18位宽,123.45,Double,有符号浮点数,精度15位,范围2.2,E,-,3081.7E+308,6.78,E+5,Integer(Int),16位有符号整数,范围,-,32768+32767,1618,2024/10/6,13,数据库原理及开发,Long,32位有符号整数,范围,-,2,147,483,6482,147,483,647,4688165,Real,有符号浮点数,精度6位,范围1.7,E,-,383.4E+38,3.6,E+5,String,字符串类型,用于存储任意,ASCII,字符,“计算机”、“,abcd”,Time,24小时时间,包括小时(00,-,23)、分(00,-,59)、秒(00,-,59)以及秒的小数位(最多6位),12:30:58:123456,UnsignedInteger(Uint),16位无符号整数,范围 065,535,54321,UnsignedLong(Ulong),32位无符号整数,范围 04,294,976,295,54321123,9.2 数据类型,9.2.1,标准数据类型,2024/10/6,14,数据库原理及开发,9.2 数据类型,9.2.2 系统对象数据类型,在,PowerBuilder,应用中,窗口、菜单、各种控件都是系统对象,每一种系统对象实际上是定义在,PowerBuilder,内部的一种数据类型。,9.2.3 任意数据类型,任意数据类型,即,Any,类型,是,PowerScript,中较为灵活的数据类型,,Any,类型是一种可变的数据类型,,Any,类型的变量能使自己变成赋给它的数据值的类型,它可以接受标准数据类型、结构类型、对象类型以及数组等各种类型。,2024/10/6,15,数据库原理及开发,9.2.3 任意数据类型,通过赋值语句给,Any,类型变量赋值后,可以用,ClassName( ),函数检查,Any,类型的实际数据类型,Any,类型也存在着一些潜在的不安全因素。使用,Any,类型时应注意以下几点:,访问,Any,类型变量前必须先赋值。如果定义了一个,Any,类型的数组,那么在赋值以前不能访问该数组的元素。如果定义了一个,Any,类型的结构,那么在给结构赋值以前不能访问其成员变量。,9.2 数据类型,2024/10/6,16,数据库原理及开发,9.2.3 任意数据类型,Any,类型变量参加运算时,必须保证所有参加运算的数据值的类型一致,否则会发生错误。,当函数原型中不允许,Any,类型作为函数参数时,需要使用类型转换函数进行类型转换,否则将产生诸如“,Unknown function”,或“,Function not found”,之类的编译错误。因为,PowerScript,通过函数名、参数类型及参数个数来确定调用哪个函数。,另外,对那些可以确定数据类型的变量,应避免使用,Any,类型,原因在于:,(1),Any,类型变量的实际类型需要在,PowerScript,运行过程中确定,无疑会使运行时间变长,影响程序运行效率,在循环体中使用,Any,类型变量更是如此。,(2),编译器不对,Any,类型数据进行正确性检查,错误只在运行时才会发现,而运行时的错误难以查出出错原因。,9.2 数据类型,2024/10/6,17,数据库原理及开发,9.2.4 枚举类型,枚举类型是,PowerScript,中定义的特殊常量。枚举类型通常用来设置对象和控件的属性或者作为系统函数的参数使用。,所有枚举类型的值都是系统预先定义的,不能像其他语言一样可以向定义好的枚举类型集合中添加新的元素,而只能按系统要求使用它。枚举类型实际上一组固定的值,这些值通常以英文单词开始,以“!”结尾来表示其为特殊类型。,9.2 数据类型,2024/10/6,18,数据库原理及开发,无论是常量或是变量在使用前都应先声明,以便编译时分配适当的存储空间,并且声明的格式、位置不同,其作用域和可见性也不同。,9.3.1 变量,变量是指在程序运行过程中可以改变的量。在应用中,使用变量前必须先予以声明。声明变量的简单语法格式为:,数据类型名 变量名 = 初始值 ,其中,数据类型,变量名为任何合法的标识符,9.3 变量与常量,2024/10/6,19,数据库原理及开发,9.3.1 变量,声明变量时可以直接把一常量或表达式的值赋给它(初始化),变量初始化是在编译时进行,而不是在运行时完成。如果声明变量时不赋初值,系统将按数据类型的默认值自动赋初值,可以在同一条语句同时声明多个相同类型的变量,变量之间用逗号( , )分隔即可。语法格式为:,数据类型名,变量名, =,初始值, ,变量名, =,初始值, ,变量名, =,初始值, ,9.3 变量与常量,2024/10/6,20,数据库原理及开发,9.3.2 常量,常量是在程序运行过程中其值保持不变的量。声明常量时需要加关键字,CONSTANT,,必须赋初值,并且不能再改变。,常量声明的语法格式为:,CONSTANT,数据类型 常量名 = 值,其中常量名一般用大写字母表示,以便将其和变量名区别开来。,注意,声明常量时不能在一行中进行多项声明。,9.3 变量与常量,2024/10/6,21,数据库原理及开发,9.3 变量与常量,9.3.3 数组,组成数组的变量称为元素,每一个元素都有唯一索引号(下标),用于将其与其它元素区分开来。数组有两种类型,即一维数组和多维数组,多维数组的大小必须确定,而一维数组的大小可以确定,也可以不确定。数组的每一维最多可包含147,483,647个元素。,声明数组的语法格式如下:,数据类型,数组名,d1,dn=,初值,2024/10/6,22,数据库原理及开发,9.3.4 变量的作用域,作用域即使用范围,无论是变量还是常量都有自己的作用域,1全局变量(,Global),全局变量可以在整个应用程序中被访问,它的作用域是整个应用程序。,PowerBuilder8,中声明全局变量的方法。,为了增强程序的可读性和编码的规范性,全局变量名以字符,g,开头,表示该变量为全局变量(,Global)。,2,实例变量(,Instance),实例变量属于某个对象(应用程序、窗口、用户对象或菜单)并与该对象相关联,只有在该对象及与该对象相关的控件的脚本中才能使用其定义的实例变量。,9.3 变量与常量,2024/10/6,23,数据库原理及开发,3共享变量(,Local),共享变量和实例变量类似,只能在定义共享变量的对象和与该对象相关的控件的脚本中访问共享变量。但是,共享变量与实际的类定义相关联,而与对象实例无关,这意味着所有同类实例都可共享相同的变量。,共享变量是一种静态变量,将保存其最后的设置,也就是说,它所在的对象关闭后再次打开时,共享变量依然保持对象关闭时的值。,4局部变量(,Shared),局部变量在使用它的事件或函数中声明,它仅属于声明它的脚本,在该程序段的任何地方均可访问局部变量,但其它程序段不能访问该程序段中的局部变量。运行程序后,进入某个程序段时,自动为该程序段的局部变量分配内存,退出程序段时局部变量占用的内存被释放。,9.3 变量与常量,2024/10/6,24,数据库原理及开发,运算符表示了一个或两个操作数之间的运算操作。,PowerScript,利用运算符构成表达式,完成一定的运算。,9.4.1,算术运算符,运算符,意义,示例,+,加,C = a + b,-,减,C = a b,减号两边加空格,*,乘,C = a * b,/,除,C = a / b,乘方,C = a b a,的,b,次幂,9.4 运算符与表达式,2024/10/6,25,数据库原理及开发,扩展算术运算符,运算符,意义,示例,等价形式,+,增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,9.4 运算符与表达式,2024/10/6,26,数据库原理及开发,9.4.2,关系运算符,9.4 运算符与表达式,运算符,含义,示例(假设,a=3,,,b=4,),结果,=,等于,a = b,False,大于,a b,False,小于,a =,大于等于,a = b,False,=,小于等于,a 10 AND a , = , ,关系运算,7,NOT,逻辑反,8,AND,逻辑与,9(最低),OR,逻辑或,2024/10/6,29,数据库原理及开发,9.4.6 表达式,表达式是由算术运算符、关系运算符及逻辑运算符连接起来的变量、常量构成的语法单位。,数值数据类型转换级别,级别,数据类型,1(最高),double,2,Real,3,decimal,4,unsignedlong, long,5(最低),unsignedinteger, integer,9.4 运算符与表达式,2024/10/6,30,数据库原理及开发,9.5.1 赋值语句,语法格式为:,variablename = expression,其中,,variablename,代表变量名,,expression,代表表达式,也可以是字符串、数字、变量或常量以及数组等。,在赋值语句中,若等号右边是表达式,则先将其结果转化为等号左边变量的类型后,再赋值给变量。,注意:因为等号“”在表达式中可以作为关系运算符,所以在赋值语句中,不能实现连续赋值。,9.5 基本语句,2024/10/6,31,数据库原理及开发,9.5.2 条件控制语句,1,IFTHEN,语句,(1)单行,IFTHEN,语句,语法格式为:,IF condition THEN action1 ELSE action2,(2),多行,IFTHEN,语句,语法格式为:,IF condition1 THEN,Action1,ELSEIF condition2 THEN,Action2,ELSE,Action3,END IF,多行,IF,THEN,语句即使只有,action1,一个语句块,也需要,END IF,表示多行,IF,THEN,的结束。,9.5 基本语句,2024/10/6,32,数据库原理及开发,2,CHOOSE CASE,语句,适用于多分支选择结构。语法格式为:,CHOOSE CASE testexpression,CASE expressionlist,statementblock,CASE expressionlist,statementblock,CASE expressionlist,statementblock,CASE ELSE,statementblock,END CHOOSE,9.5 基本语句,2024/10/6,33,数据库原理及开发,2,CHOOSE CASE,语句,其中,,testexpression,代表测试值,,expression,代表判断表达式,,statementblock,代表测试值与判断表达式相匹配时执行的语句块,方括号里的内容可以省略。,判断表达式可以有如下几种形式:,(1)用逗号分隔一组数据。,(2)用,TO,表示一个区间。,(3)用,IS,代表测试值,与关系运算符一起构成关系表达式,(4)用前三种形式的组合,用逗号进行分隔。,9.5 基本语句,2024/10/6,34,数据库原理及开发,2,CHOOSE CASE,语句,在,CHOOSE CASE,语句中,至少应包含一个,CASE,子句,并且由,END CHOOSE,结束。执行,CHOOSE CASE,语句时,,PowerScript,将逐条查找,CASE,子句,如果找到与测试值相匹配的判断表达式,就执行该,CASE,子句中的语句块,然后执行,END CHOOSE,的后继语句。如果包含,CASE ELSE,子句,那么在未找到任何匹配的判断表达式时,执行,CASE ELSE,子句中的语句块。,9.5 基本语句,2024/10/6,35,数据库原理及开发,9.5.3 循环控制语句,1,DOLOOP,语句,(1),DO UNTIL conditionLOOP,语法格式为:,DO UNTIL condition,Statementblock,LOOP,执行过程为:先判断控制条件,condition,,,如果为,false,,,则执行语句块,statementblock,,,执行到,LOOP,后,接着判断条件,condition,,,直到结果为,true,时结束循环。,9.5 基本语句,2024/10/6,36,数据库原理及开发,(2),DO WHILE conditionLOOP,的语法格式:,DO WHILE condition,Statementblock,LOOP,执行过程为:先判断控制条件,condition,,如果为,true,,则执行语句块,statementblock,,执行到,LOOP,后,接着判断条件,condition,,直到结果为,false,时结束循环。,(3),DOLOOP UNTIL condition,的语法格式:,DO,Statementblock,LOOP UNTIL condition,执行过程为:先执行语句块,statementblock,,,然后判断控制条件,condition,,,如果为,false,,,则继续执行语句块,statementblock,,,直到,condition,的结果为,true,时结束循环。,9.5 基本语句,2024/10/6,37,数据库原理及开发,(4),DOLOOP WHILE condition,的语法格式为:,DO,Statementblock,LOOP WHILE condition,执行过程,先执行语句块,statementblock,,然后判断控制条件,condition,,如果为,true,,则继续执行语句块,statementblock,,直到,condition,的结果为,false,时结束循环。,四种循环结构比较,前两种结构是先判断条件,再执行循环体,所以有可能开始时条件就不满足,从而使得循环体一次都不能得以执行;后两种结构是执行一次循环体后再判断条件,所以至少可以执行一次循环体。,9.5 基本语句,2024/10/6,38,数据库原理及开发,2,FORNEXT,语句语法格式为:,FOR varname = start TO end STEP increment,Statementblock,NEXT,3GOTO,语句,GOTO,语句的语法格式为:,GOTO label,其中,,label,是语句标号,它使用标识符的命名规则,语句标号可以出现在程序的任何位置,但必须在一行语句的最前面,并且后面要跟冒号。,9.5 基本语句,2024/10/6,39,数据库原理及开发,4循环嵌套,循环嵌套是指把一个循环放在另一个循环的循环体中。,5,EXIT,语句,EXIT,语句是中途结束循环的语句。注意:如果在循环嵌套中使用,EXIT,语句,那么执行,EXIT,语句只能退出当前层的循环,而不能退出所有循环。,6,CONTINUE,语句,CONTINUE,语句控制循环的执行使之返回循环开始处。,9.5 基本语句,2024/10/6,40,数据库原理及开发,9.5.4 其它语句,1,CALL,语句,CALL,语句在继承对象中调用祖先对象的脚本。语法格式为:,CALL ancestorobjectname controlname:event,其中,,ancestorobjectname,是指祖先对象名,方括号里的内容表示可以省略,,controlname,是指祖先对象中的控件名,,event,是指祖先对象中的事件名。,2,RETURN,语句,RETURN,语句用于立即终止脚本或函数的执行并返回调用程序。其语法格式为:,RETURN expression,其中,,expression,表示函数的返回值,方括号内的内容可以省略。,9.5 基本语句,2024/10/6,41,数据库原理及开发,3,HALT,语句,HALT,语句用于终止应用程序的运行。其语法格式为:,HALT CLOSE,其中,CLOSE,为可选项,当遇到不包含,CLOSE,的,HALT,语句时,将立即终止应用程序的运行,如果遇到包含,CLOSE,的,HALT,语句,则先执行应用对象的,CLOSE,事件中的脚本,然后终止应用程序。,4,CREATE,语句,CREATE,语句用于创建对象实例。语法格式有两种:,语法一:,Objectvariable = CREATE objecttype,其中,,Objectvariable,表示返回的句柄,即与创建的对象实例类型相同的变量。,Objecttype,表示所创建对象的类型。,9.5 基本语句,2024/10/6,42,数据库原理及开发,4,CREATE,语句,语法二:,Objectvariable = CREATE USING objecttypestring,其中,,Objectvariable,表示返回的句柄,即与创建的对象实例类型相同的变量。,Objecttypestring,表示要创建对象类型名称的字符串。,注意:,CREATE,语句用于创建非可视对象,可视对象的实例使用,OPEN,函数打开,标准数据类型和结构体不用,CREATE,语句创建,当对象的,AutoInstantiate,属性被设置为,TRUE,时不需要使用,CREATE,语句。,5,DESTROY,语句,DESTROY,语句用于释放由,CREATE,语句创建的实例。语法格式为:,DESTROY Objectvariable,其中,,Objectvariable,表示对象实例变量,9.5 基本语句,2024/10/6,43,数据库原理及开发,9.6.1,MessageBox( ),函数,使用,MessageBox( ),函数可以向用户显示或提示各种信息。语法如下:,MessageBox ( title, text ,icon , button ,default ),title,是一个被用来确定,MessageBox,标题的字符串。,text,是在,MessageBox,中显示的文本。,icon,用来指示显示在,MessageBox,左侧的图标。可选的值有,Information! StopSign!、Exclamation!、Question!、None!。,9.6 常用标准函数,2024/10/6,44,数据库原理及开发,button,用来指示你想要显示的命令按钮的集合。这些值是,OK!、OKCancel!、YesNo!、YesNoCancel!、RetryCancel!、AbortRetryIgnore!。,返回值只有1、2、3和-1,分别表示用户的按键和失败的情况。默认值是,OK!。,default,指定默认的按钮,举例,messagebox(,提示,你好,StopSign!,OKCancel!,2),9.6 常用标准函数,2024/10/6,45,数据库原理及开发,9.6.2,GetFileOpenName(),函数和,GetFileSaveName(),函数,作用,用于显示,Windows,系统打开文件对话框和保存文件对话框,,GetFileOpenName(),用于选择要打开的文件名及所在路径,,GetFileSaveName(),用于选择或输入要保存的文件名及路径。,格式,GetFileOpenName(title, pathname, filename , extension , filter , initdir , aFlag ),GetFileSaveName(title, pathname, filename , extension , filter , initdir , aFlag ),9.6 常用标准函数,2024/10/6,46,数据库原理及开发,title,字符串类型:用于指定对话框标题栏上显示的文本。,pathname,字符串变量:用于存储从对话框返回的路径和文件名。,filename,字符串变量:用于存储从对话框返回的文件名。,extension,字符串(可选)(长度为13个字符):用于指定对话框中默认文件的扩展名,该参数的默认值为没有扩展名,9.6 常用标准函数,2024/10/6,47,数据库原理及开发,filter,字符串(可选):用于指定在对话框中文件类型下拉列表框中显示的允许用户选择或保存的文件的扩展名类型,格式为*.,ext,,例如*.,exe;,如果只显示.,txt,为后缀名的文本文件,则,Filte,参数值为:”,Text Files (*.TXT),*.TXT”;,如果显示多种扩展名,并且可操纵多种扩展名的文件,则,filter,参数值可按如下格式设置:”,PIF files, *.PIF, Batch files,.BAT“。Filter,参数的默认值为:”,All Files (.),.,”,,表示所有类型文件。,initdir,字符串(可选):用于指定对话框打开时的初始路径,默认值为系统当前路径。,9.6 常用标准函数,2024/10/6,48,数据库原理及开发,aFlag long,型(可选):用于指定在对话框中的可用选项。每种选项的,flag,值用公式,2,(,index -1),计算,其中,index,是和选项相关的整数值。最后传递给,GeFiletOpenName,和,GetFileSaveName,的,flag,值是各选项,flag,值之和。,返回值,Integer,类型,成功时返回,1,,如果用户单击“取消”按钮则返回,0,;出错返回-,1,;如果某一参数为,NULL,,,则返回值为,NULL,。,实例:文件拷贝功能实现,9.6 常用标准函数,2024/10/6,49,数据库原理及开发,9.6.3 数据类型检查函数,数据类型检查函数又称为,Is,簇函数它们用来判断一个字符串是否符合某种数据类型的格式,返回值是一个布尔类型的值。,Is,簇函数的语法格式为:,Is*(string),其中,string,为要测试的字符串。,IsNumber( ),用于测试某字符串是否为有效数值。,IsDate( ),检测指定的字符串是否包含有效日期。,IsTime( ),检测指定的字符串是否包含有效时间。,IsNull ( ),测试某变量或表达式的值是否为,Null,。,9.6 常用标准函数,2024/10/6,50,数据库原理及开发,9.6.4 数据类型转换函数,Integer(string),将字符串转化为整形,Long(string ),将字符串转化为长整形,Real(string),将字符串转化为实形,Double(string),将字符串转化为双精度形,Dec(string),String( ),各种不同的数据类型转化为字符串,9.6 常用标准函数,2024/10/6,51,数据库原理及开发,9.6.5,Run( ),函数,调用,Run( ),函数可以在,PowerBuilder,应用程序中运行其它的应用程序。语法格式为:,Run(Program ,state ),其中参数,Program,是一个字符串,指定要运行的程序名称。,9.6 常用标准函数,2024/10/6,52,数据库原理及开发,9.7.1 自定义函数,参数的传递方式有以下三种:,Value ,表示值传递,将实际参数的值传递给函数。,Reference,地址传递,把实际参数的地址传递给函数,如果函数修改了形式参数的值,则实际参数的值也就被修改了。,Readonly,只读地址传递,把实际参数的地址传递给函数,但不允许修改参数的值。,9.7 自定义函数和结构,2024/10/6,53,数据库原理及开发,1,自定义全局函数,(1)选择,File,New,菜单项,或在工具栏中单击,New,图标,打开,New,对话框,单击,PB Object,选项卡。,(,2,)选择,Function,图标,然后单击,OK,按钮,或者直接双击该图标,打开,Function,画板,9.7 自定义函数和结构,2024/10/6,54,数据库原理及开发,(,3,)在,Function Name,项中输入函数名,自定义全局函数的命名一般用“,f_,”,开头,命名规则即标识符的命名规则;在,Return Type,下拉列表框中选择函数的返回值类型,如果函数没有返回值,则选择“,None,”,项;在,Pass By,下拉列表框中选择参数传递方式;在,Argument Type,下拉列表框中选择参数类型;在,Argument Name,项中输入参数名(即形式参数,简称形参),命名规则即标识符的命名规则。,(,4,)编写完函数脚本后可以编译并保存该函数。,9.7 自定义函数和结构,2024/10/6,55,数据库原理及开发,2自定义对象函数,自定义对象函数与某对象相联系,是为具体的对象(如窗口、菜单、用户对象或应用程序)而定义的,它是这些对象的一部分,与对象保存在一起。,自定义对象函数的访问级别可以改变,有三个级别分别为:,Public,可以在应用程序的任何脚本中调用该函数,Private,只能在定义该函数的对象脚本中才能调用该函数,不能在该对象的后代脚本中调用该函数。,Protected,可以在该函数的对象以及它的后代的脚本中调用该函数。,调用自定义对象函数时,如果在对象中调用,则可直接调用,如果在对象外调用,必须在函数名前指定对象名。,9.7 自定义函数和结构,2024/10/6,56,数据库原理及开发,9.7.2 结构,1全局结构,全局结构,在应用程序的任何地方都可以访问的结构。全局结构作为独立的对象存放在库中。,创建过程,(1)选择,File,New,菜单项,或在工具栏中单击,New,图标,打开,New,对话框,单击,PB Object,选项卡。,(,2,)选择,Structure,图标,然后单击,OK,按钮,或者直接双击图标,打开,Structure,画板,输入域变量,2对象结构,对象结构是在具体的对象,(,如窗口、菜单、用户对象或应用程序,),中定义的,它是这些对象的一部分,与对象保存在一起。与函数不同的是不能为结构定义访问级别,一般只能在对象内使用,或当该对象打开时,可以在其它对象脚本中使用该结构。,9.7 自定义函数和结构,2024/10/6,57,数据库原理及开发,如果需要在程序中连接数据库就必须通过嵌入式,SQL,来完成,有时候我们需要在程序中直接使用,SQL,语句操作数据库。,PowerScript,提供了一整套嵌入式,SQL,语句。,PowerScript,支持在程序中使用嵌入式,SQL,语句,并且支持在,SQL,语句中使用具体数据库管理系统(,DBMS),特有的,SQL,语句、函数和保留字,实际上,对于,SQL,语句,,PowerBuilder,在将其发送到,DBMS,之前,并不做任何处理,而由,DBMS,完成相应操作,最后,PowerBuilder,得到处理结果。,9.8 嵌入式,SQL,语句,2024/10/6,58,数据库原理及开发,PowerBuilder,中嵌入,SQL,语句的要求,整个,SQL,语句可以写在一行,也可以写成更清晰易懂的多行格式,不需使用断行续行符,只要在整个语句结束处加上一个分号(;)即可。在,SQL,语句中可以使用常量或合法的变量,但使用变量时须在变量前加个冒号(:)(通常称做绑定变量),多个变量或常量之间用逗号(,)分隔。,9.8 嵌入式,SQL,语句,2024/10/6,59,数据库原理及开发,9.8.1 数据库连接的建立与断开,1使用,CONNECT,建立与数据库的连接,CONNECT,是每个访问数据库的,PowerBuilder,程序必须使用的语句,它的功能是通过事务对象将应用程序与数据库建立连接,连接成功后,其它,SQL,语句和数据窗口才能通过事务对象对数据库进行操作。,CONNECT,语句的语法格式为:,CONNECT USING TransactionObject;,其中,,TransactionObject,是事务对象,在执行该语句前,必须正确设置事务对象的数据库连接属性。方括号(, ,)表示该成分可以省略,省略时使用默认的事务对象,SQLCA,。,9.8 嵌入式,SQL,语句,2024/10/6,60,数据库原理及开发,9.8.1 数据库连接的建立与断开,2使用,DISCONNECT,断开与数据库的连接,DISCONNECT,语句断开与数据库的连接,执行该语句时,它首先执行,COMMIT,语句(事务提交语句),完成事务提交,然后断开与数据库的连接。,DISCONNECT,语句的语法格式为:,DISCONNECT USING TransactionObject;,其中,,TransactionObject,是前面用,CONNECT,语句连接的事务对象名。,9.8 嵌入式,SQL,语句,2024/10/6,61,数据库原理及开发,9.8.2 提交与回滚事务,1提交事务语句,COMMIT,COMMIT,语句提交事务,完成数据库的物理修改。执行该语句后,将关闭所有先前打开的游标(,CURSOR),和过程(,PROCEDURE),,并开始一个新的事务。,COMMIT,语句的语法格式为:,COMMIT USING TransactionObject;,其中,,TransactionObject,是事务对象名,缺省时使用事务对象,SQLCA。,9.8 嵌入式,SQL,语句,2024/10/6,62,数据库原理及开发,9.8.2 提交与回滚事务,2,回滚事务语句,ROLLBACK,ROLLBACK(,回滚)语句放弃自上一个,COMMIT、ROLLBACK,或,CONNECT,语句以来的所有数据库操作,关闭所有的游标和过程,并开始一个新的事务。其语法格式为:,ROLLBACK USING TransactionObject ;,其中,,TransactionObject,是事务对象名,缺省时使用事务对象,SQLCA,。,9.8 嵌入式,SQL,语句,2024/10/6,63,数据库原理及开发,9.8.3,数据查询语言和数据操纵语言,第,3,章介绍的数据查询语言,SELECT,语句和数据操纵语言,UPDATE,、,DELETE,和,INSERT,语句都可以嵌入,PowerScript,脚本语言中使用,只需遵守嵌入规则即可。并且在这几种语句的最后可加入,USING TransactionObject,子句,,USING,作为关键字,,TransactionObject,为连接数据库的事务对象名称。如果连接数据库使用缺省的事务对象,SQLCA,,,则该子句可以省略。,9.8 嵌入式,SQL,语句,2024/10/6,64,数据库原理及开发,9.8.4 检查,SQL,语句的执行情况,每当执行一条,SQL,语句后,与该语句相关的事务对象的,SQLCode,属性都给出一个值指示,SQL,语句的执行是否成功,,SQLCode,取值为:,0 : 最近一次,SQL,语句执行成功,-1: 最近一次,SQL,语句执行失败,100:最近一次,SQL,语句没有返回数据,当,SQLCode,的值为,-1,时(即最近一次,SQL,语句执行失败时),事务对象的,SQLDBCode,属性中存放着数据库厂商提供的错误代码、事务对象的,SQLErrText,属性中存放着数据库厂商提供的错误信息,利用这两个属性,可以得到出错原因。,9.8 嵌入式,SQL,语句,2024/10/6,65,数据库原理及开发,Int Emp_num,Emp_num = Integer(sle_Emp_Num.Text),SELECT employee.Emp_LName, employee.Emp_Fname,INTO :sle_LName.text, :sle_FName.text,FROM Employee,WHERE Employee.Emp_nbr = :Emp_num,USING Emp_tran ;,if Emp_tran.SQLCode = 100 then /,未找到满足条件的数据,MessageBox(,查询雇员, ,未找到指定雇员,),elseif Emp_tran.SQLCode 0 then /SELECT,语句执行不成功,MessageBox(,数据库错误, &,Emp_tran.SQLErrText, Exclamation!)/,出错信息,End If,9.8 嵌入式,SQL,语句,9.8.4 检查,SQL,语句的执行情况实例,2024/10/6,66,数据库原理及开发,9.8.5 游标操作(读取多行数据),当需要读取多条记录时,就需要使用游标进行操作。其典型运用过程一般为:,(1)用,DECLARE,声明游标;,(2)用,OPEN,语句打开游标;,(3)使用,FETCH,语句读取一行数据;,(4)处理数据;,(5)判断是否已经读完所有数据,未读完时重复执行(3)(5)步;,(,6,)使用,CLOSE,语句关闭游标。,9.8 嵌入式,SQL,语句,2024/10/6,67,数据库原理及开发,1,DECLARE,语句,使用游标前需要用,DECLARE,语句声明游标,其语法格式为:,DECLARE CursorName CURSOR FOR SelectStatement,USING TransactionObject;,其中,,CursorName,是游标的名称,可以使用任何有效的标识符来表示;,SelectStatement,是任何有效的,SELECT,语句;,TransactionObject,是事务对象名,缺省时使用,SQLCA。,9.8 嵌入式,SQL,语句,2024/10/6,68,数据库原理及开发,2OPEN,语句,OPEN,语句打开已经声明的游标并执行相应的,SELECT,语句。其语法格式为:,OPEN CursorName;,其中,CursorName,是已经用,DECLARE,语句声明的游标名。,3,FETCH,语句,FETCH,语句从游标中读取当前记录并把它保存到指定的变量中。当数据库支持下述用法时,还可以使用,FETCH FIRST、FETCH PRIOR、FETCH LAST。FETCH,语句的语法格式为:,FETCH CursorName INTO HostVariableList;,其中,CursorName,是,OPEN,语句打开的游标名,,HostVariableList,是与,SELECT,语句中选择字段相对应的绑定变量列表。,9.8 嵌入式,SQL,语句,2024/10/6,69,数据库原理及开发,4,CLOSE,语句,CLOSE,语句关闭先前打开的游标。其语法格式为:,CLOSE CursorName ;,其中,CursorName,是先前打开游标的名称。,关闭游标后,就不能再使用,FETCH,语句从游标中读取数据了。,9.8 嵌入式,SQL,语句,2024/10/6,70,数据库原理及开发,例如,要实现从数据库用户表中将所有,name(,用户名)字段的值读取出来写到窗口上的下拉列表框控件,ddlb_1,中,利用游标的实现代码如下:,string name /,定义变量,/,定义游标,declare user_point cursor for,select password.name,from password;,open user_point; /,打开游标,fetch user_point into :name; /,获取数据,/,循环读取数据放入下拉列表框,do while sqlca.sqlcode=0,ddlb_1.additem(name) /,将数据写到下拉列表框中,fetch user_point into :name; /,获取下一条数据,loop,9.8 嵌入式,SQL,语句,2024/10/6,71,数据库原理及开发,9.9 编写脚本,无论为哪个对象编写脚本,都应包括如下几个步骤:打开脚本视图区、编写脚本、编译脚本后保存。,在为对象编写脚本时,可以使用,PowerBuilder,提供的工具对脚本所需的变量、函数、结构以及语句等直接进行粘贴,从而提高程序开发的准确性和开发效率。,9.9.1 打开脚本视图区,9.9.2 粘贴脚本,9.9.3,编译脚本,9.9 编写脚本,2024/10/6,72,数据库原理及开发,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!