PowerBilder 程序设计 费雅洁 14153-00PowerBuilder程序设计_第1页
PowerBilder 程序设计 费雅洁 14153-00PowerBuilder程序设计_第2页
PowerBilder 程序设计 费雅洁 14153-00PowerBuilder程序设计_第3页
PowerBilder 程序设计 费雅洁 14153-00PowerBuilder程序设计_第4页
PowerBilder 程序设计 费雅洁 14153-00PowerBuilder程序设计_第5页
已阅读5页,还剩513页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PowerBuilder程序设计(第2版),费雅洁、王健,第1章PowerBuilder概述,1.1PowerBuilder发展及特点PowerBuilder是Sybase公司于1991年6月推出的著名的数据库应用系统开发工具。PowerBuilder是一种面向对象的、具有可视图形界面的、快速的交互式开发工具。随着PowerBuilder的多次升级,其功能不断完善,它既能设计传统的基于客户/服务器体系结构的应用系统,也能够开发出基于Internet的三层体系结构的应用系统,并且支持开发目前流行的Microsoft.NET应用程序。,1.1.2PowerBuilder的特点,1.采用面向对象技术2.功能强大的数据窗口技术3.支持多种数据库接口4.可视化开发环境5.功能完善的PowerScript语言6.支持多平台开发,1.2PowerBuilder11.0的集成开发环境,PowerBuilder集成开发环境(IntegratedDevelopmentEnvironment,简称IDE),其中包含了菜单、工具条、子窗口和工作区。,1.系统菜单及工具条2.系统树窗口3.剪贴板窗口4.输出窗口5.状态栏6.工作区,1.3PowerBuilder应用系统开发的基本步骤,本章小结,PowerBuilder作为基于客户机/服务器应用的快速数据库前端开发工具,具有事件驱动、面向对象、可与多种数据库管理系统连接、支持多平台开发等特点。PowerBuilder由多个组件构成,包括PowerBuilder开发环境、SQLAnywhere数据库等,在安装时用户可以根据需要选择安装。在安装过程中由安装向导程序引导用户完成PowerBuilder的安装。PowerBuilder的主窗口包含系统菜单、工具条、工作区、系统树窗口、剪贴板窗口和状态栏等部分。PowerBuilder提供了联机帮助,对于快速、准确地掌握PowerBuilder的编程语言和使用方法十分有用。利用PowerBuilder开发应用系统的基本步骤主要有系统分析与设计,创建数据库、工作区、目标、对象,添加控件并设置其属性,编写对象和控件上某个事件发生时要执行的程序脚本,调试应用程序,编译和发布应用程序,以及后期维护。,第2章PowerScript语言,2.1PowerBuilder脚本窗口简介,编写脚本的方法为:在第一个下拉列表框中选中对象,在第二个下拉列表框选中该对象的事件,在脚本编辑栏中编写脚本。在编写脚本时,窗口的工具条上有一些与编写脚本相关的图标,如图2-2所示。图标功能参见第1章表1-2。图2-2与脚本相关的工具条图标,2.2PowerScript语法规则,1.注释符2.标识符注意:由于短横线“-”与减号是同一个字符,因此,表达式中使用减法运算符时,必须在减号的两边各加一个空格,否则可能产生语法错误。同时,也应该尽量不要在标识符中使用短横线,以避免与减法运算符混淆,可以使用下划线“_”分隔单词。3.保留字4.特殊ASCII字符5.分隔符和续行符6.对象及其属性、函数的引用方法,2.3PowerScript数据类型,2.3PowerScript数据类型,1.标准数据类型2.Any类型3.枚举类型4.系统对象数据类型,2.4常量与变量,2.4.2变量在编写脚本代码时,程序中用到的所有变量都需要预先定义。1.变量的定义方法定义变量的格式为:=,=,其中“=”为赋值符号。如果一次声明多个变量,需要在变量之间使用“,”间隔。变量被声明后,若未指定初始值,则系统将赋予默认值。对数值型变量而言,其默认值为0;对字符型及字符串型变量而言,其默认值分别为空字符或空字符串;对布尔型变量而言,其默认值为FALSE。,2.变量的作用域,2.5数据类型的检查与转换,2.5.1数据类型转换函数在PowerScript中,数据从数值类型转换到其他类型是自动实现的,但是要将字符串转换成数值类型,则必须使用以下几种数据类型转换函数。Integer(string)Long(string)Real(string)Double(string)Dec(string)Date(string)其中,函数的参数string是需要转换的字符串常量或字符串变量,函数的返回值是转换后的值,转换后的数据类型与函数名相同。,例如:ls_str=76li_value=Integer(ls_str)/整型变量li_value得到数值76ld_value=Dec(123.56)/小数型变量ld_value得到数值123.5ls_str=2002-03-02ldate=Date(ls_str)/日期型变量ldate得到日期02-03-02,2.5.2数据类型检查函数数据类型检查函数常用来检查字符串中内容是否为合法值,常用的有如下几种。IsNumber(string)IsDate(string)IsTime(string)IsNull(value)等。IsNumber()的参数是一个字符串,该函数用来测试字符串中的内容是否表示一个合法的数字,若是则函数返回值为true,否则为false;IsDate()和IsTime()与IsNumber()相似,分别测试字符串中内容是否是合法的日期或时间,若是则返回true,否则返回false。,2.6PowerScript运算符及表达式,1.算术运算符2.关系运算符3.逻辑运算符4.连接运算符,2.7数组,1.数组的定义数组定义的一般格式为:数组元素个数缺省情况下数组元素的下标从1开始。如果一次声明多个数组,需要在数组名称之间使用逗号间隔。例如:intscores30/定义一个一维整型数组scores,共有30个元素。stringaddress/定义一个动态字符串数组address,未指明元素个数。decprice20,length30/*定义两个一维小数型数组price和length分别有20和30个元素*/,以上定义的都是一维数组,实际应用中往往需要多维数组,用于存储矩阵等数据。如果定义多维数组,下标之间用逗号分开,例如:realval5,5/定义二维实型数组val,有5行5列。默认的数组元素下标从1开始,也可以指定数组下标的变化范围,例如:intscores3to9/定义一个一维整型数组scores,下标从3到9。,2.数组元素的赋值(1)在数组定义的同时进行初始化,例如:reallr_Rate3=1.20,2.40,4.80定义实型数组lr_Rate,同时对其中元素初始化。其中,lr_Rate1=1.20,lr_Rate2=2.40,lr_Rate3=4.80。(2)在数组定义之后再进行赋值,例如:integerli_Arrli_Arr=1,2,3定义变长整型数组li_Arr,并赋值,结果为li_Arr1=1,li_Arr2=2,li_Arr3=3。(3)对多维数组的赋值是按列进行的,例如:integera3,2=1,2,3,4,5,6赋值时,将1、2、3分别赋给第一列的三个元素,4、5、6分别赋给第二列的元素。即a1,1=1,a2,1=2,a3,1=3,a1,2=4,a2,2=5,a3,2=6。,2.8PowerScript基本语句,2.8.1赋值语句赋值语句可以实现对变量、对象属性以及对象实例的赋值。赋值语句的格式为:=其中的变量名也可以是对象属性名,赋值语句将赋值号右边表达式的结果赋值给左边的变量。例如:li_sum=li_sum+3/将变量li_sum的值加3ld_sale=4237.32/将变量ld_sale赋值为4237.32注意:在赋值语句中不能使用连续赋值的方式,如n=m=5是非法的。,2.8.2条件语句,1.IF语句IF语句有单行和多行两种。单行IF语句的格式为:IFTHENELSE单行IF语句的执行过程为先计算逻辑表达式的值,如果其结果为TRUE,则执行其后语句组1;否则执行语句组2。多行IF语句的格式为:IFTHENELSEIFTHENELSEENDIF,2.CHOOSECASE语句CHOOSECASE语句的格式为:CHOOSECASECASE值1CASE值2CASEELSEENDCHOOSE语句的执行过程为根据表达式或变量的值决定执行相应的语句组,当表达式或变量的值不等于前面列举的所有值时,执行CASEELSE后的语句组N,然后结束语句,CASEELSE部分是可选的。,2.8.3循环语句,1.DOLOOP语句DOLOOP语句有DOUNTILLOOP、DOWHILELOOP、DOLOOPUNTIL、DOLOOPWHILE四种格式。(1)DOUNTILLOOP语句的格式为:DOUNTILLOOP该语句的执行过程为先计算逻辑表达式,其结果为FALSE时,执行语句组,直到逻辑表达式为TRUE时退出循环,,(2)DOWHILELOOP语句的格式为:DOWHILELOOPDOWHILELOOP语句的执行过程为先计算逻辑表达式,其结果为TRUE时,执行语句组,直到逻辑表达式为FALSE时退出循环。,(3)DOLOOPUNTIL语句的格式为:DOLOOPUNTILDOLOOPUNTIL语句的执行过程为先执行语句组,然后测试逻辑表达式,如果其结果为FALSE,则继续执行语句组,直到逻辑表达式为TRUE时退出循环。在DOLOOPUNTIL语句中语句组至少执行一次。,(4)DOLOOPWHILE语句的格式为:DOLOOPWHILEDOLOOPWHILE语句的执行过程为先执行语句组,然后测试逻辑表达式,如果其结果为TRUE,则继续执行语句组,直到逻辑表达式为FALSE时退出循环。在DOLOOPWHILE语句中语句组至少执行一次。,2.FORNEXT语句FORNEXT语句一般用于已知循环次数的循环,语句的格式为:FOR=TOSTEPNEXT该语句的执行过程为循环变量先取起始值,如果循环变量的值不大于终止值,则执行语句组,然后循环变量加上步长,再判断循环变量是否大于终止值,若大于,退出循环,否则,继续循环。FORNEXT语句步长的默认值是1,因此STEP1可以省略。,3.CONTINUE语句在DOLOOP或FORNEXT语句构成的语句组中,遇到CONTINUE语句的时候,将结束本次循环,开始新一轮循环。【例2.8】计算100到200之间不能被3整除的数之和,存入变量sum中。intn,sum=0FORn=100to200IFmod(n,3)=0THENcontinuesum=sum+nNEXT执行结果:sum中的值为10200。,4.EXIT语句使用EXIT语句可以跳出由DOLOOP语句或FORNEXT语句构成的循环结构。【例2.9】计算1000以内能被17整除的最大数,存入变量n中。本例中仅需找到1000以内能被17整除的最大数,则一旦找到最大数可提前退出循环,适合使用EXIT语句。intnFORn=1000TO0step-1IFmod(n,17)=0THENexitNEXT执行结果:n中的值为986。,2.8.4返回语句返回语句立即终止事件处理程序或函数的执行,把控制权交给调用程序,并可以将一个值或者一个表达式的值作为返回值。返回语句的格式为:RETURN2.8.5程序终止语句程序终止语句用于终止当前应用程序的运行。程序终止语句的格式为:HALTCLOSE其中,CLOSE是一个可选项,如果没有CLOSE可选项,那么应用程序直接终止。如果有CLOSE可选项,那么应用程序先执行应用对象的CLOSE事件处理程序,之后再终止应用程序的运行。,2.9PowerScript对数据库的支持,2.9.1常用嵌入式SQL语句1.查询语句selectSELECT语句可以从数据库中查询数据,其一般格式为:SELECTINTOFROMWHEREUSING;,2.插入行语句insertINSERT语句向数据库表中插入一行记录,其一般格式为:INSERTINTO表名()VALUESUSING;,3.更新语句UPDATE更新语句可以用新值更新数据库表中指定的行,其一般格式为:UPDATESET=,=WHEREUSING;,4.删除行语句DELETE删除行语句可以删除数据库表中指定的行,其一般格式为:DELETEFROMWHEREUSING;,2.9.2SQL语句的错误处理SQL语句的执行成功与否,可以通过事务对象的SQLCode属性来检查。在默认情况下SQL语句使用的事务对象是SQLCA。SQLCode属性的取值有3种情况,含义分别为:0最近一次SQL语句执行成功-1最近一次SQL语句执行失败100最近一次SQL语句执行后没有返回数据,2.9.3事务管理语句事务是关系数据库中进行数据库操作的基本逻辑工作单位,它是用户定义的一个数据库操作序列。一个事务可以是一组SQL命令、一条SQL命令或整个程序,通常情况下,一个应用程序包括多个事务。事务中的所有操作是一个不可分割的整体,这些操作要么都做,要么都不做,以保持数据库中数据的一致性和稳定性。,PowerScript中有四条事务管理语句,下面分别介绍。1.CONNECTCONNECT语句用来连接数据库。语法格式为:CONNECTUSING;其中的USING是可选项,用来指定连接数据库所使用的事务对象。如果不使用该可选项,那么就默认地使用系统的事务对象SQLCA。对任何数据库进行访问之前,都必须首先使用CONNECT语句连接数据库。,2.DISCONNECT与CONNECT相反,DISCONNECT语句用来断开与数据库的连接。语法格式为:DISCONNECTUSING;其中可选项USING是包含需要断开连接的数据库信息的事务对象。3.COMMITCOMMIT语句用来提交事务,完成数据库的物理修改。一个提交完毕后,当前事务对数据库的所有更新将变为永久性的。语法格式为:COMMITUSING;,2.9.4游标的使用,SELECT语句能够从数据库中检索出一组记录,而PowerScript只能一条条地接收并处理记录。在这种情况下需要采用游标来处理SELECT语句检索出的每一条记录。游标实际上是利用它内部的SELECT语句把数据放到结果集中,然后通过移动它的指针来逐条访问这些数据。在游标中,SELECT语句决定了要取出记录的集合,PowerScript的游标控制着这个集合,通过向下移动游标指针即可将这些记录逐行取出,送给PowerScript语句进行处理。游标的使用步骤如下:,(1)用DECLARE声明游标。(2)用OPEN语句打开游标。(3)使用FETCH语句读取一条记录。(4)处理该记录。(5)判断是否已经读完所有记录,若未读完则重复执行(3)(5)步,否则执行(6)步。(6)使用CLOSE语句关闭游标。,【例2.17】使用游标检查用户输入的用户名和密码是否正确。Strings_user_id,s_user_pwdDECLAREMy_CursorCURSORFORSELECTlogininfo.username,logininfo.passwordFROMlogininfo;OPENMy_Cursor;FETCHMy_CursorINTO:s_user_id,:s_user_pwd;DOWHILESQLCA.SQLCode=0,IFs_user_id=sle_1.textANDs_user_pwd=sle_2.textTHEN/*sle_1.text和sle_2.text代表登录窗口中用户输入用户名和密码的两个单行文本控件中的文本,有关单行文本控件用法详见7.2节*/CLOSEMy_Cursor;open(w_main)/验证成功打开主窗口close(parent)/关闭当前窗口RETURNELSEFETCHMy_CursorINTO:s_user_id,:s_user_pwd;ENDIFLOOPMessagebox(提示信息,用户名或密码错误,请重新输入!)CLOSEMy_Cursor;,第3章案例分析,3.1图书销售管理系统需求分析,具体功能说明如下:图书采购管理:根据图书实际采购情况将到货图书信息添加到图书采购表,并同时更新统计库存数量。本模块也可根据某种书籍的统计库存量、销售及缺书情况确定采购数量。另外本模块中可以查询统计图书库存情况和采购情况。图书销售管理:输入顾客购书需求信息,自动查询并显示所需图书的基本信息及库存量,如果库存充足,顾客确定购买后可以进行结算,并修改图书库存量,同时把此次销售的有关信息添加到图书销售表中。如果库存不足可以在图书销售表中记载此次缺书信息,以便日后进行采购。另外本模块中可以查询统计图书销售情况。缺书管理:可以查询缺书信息,以便采购员进行采购。退书管理:如果顾客要把已买的书籍退还给书店,系统将输出一份退书单并自动修改图书库存量,把本次退书的信息记载到图书销售表中。另外本模块中可以查询统计退书情况。系统维护:主要完成图书、出版社、顾客、书店等基本信息的添加、修改及查询。,3.2概念模型设计,依据上述需求分析,进行图书销售管理系统的概念模型设计,其E-R图如图3-2所示。PowerDesigner是Sybase公司的计算机辅助软件工程工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。PowerDesigner的具体使用方法参见本章的操作实践部分。本书采用Sybase公司的PowerDesigner来建立案例的CDM数据模型,如图3-3所示。,3.3逻辑模型设计,逻辑模型设计的任务就是把概念模型设计阶段设计好的基本E-R模型转换为所选用的数据库管理系统所支持的数据模型相符合的逻辑结构。E-R图转换为关系模型的规则为:(1)实体关系模式E-R图中的每一个实体可以转换为一个关系模式,实体的属性就是关系模式的属性,实体的码就是关系模式的码。(2)一对一的联系关系模式E-R图中的每一个一对一的联系可以转换为一个独立的关系模式,也可以与任意一端实体对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。一般情况下,将一对一联系与任意一端实体对应的关系模式合并,即将一端的码和联系本身的属性传至另一端,一端的码作为候选码。,(3)一对多的联系关系模式E-R图中的每一个一对多的联系可以转换为一个独立的关系模式,也可以与多端实体对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,关系的码为多端实体的码;如果转换为与多端实体对应的关系模式合并,则一端实体的码和联系本身的属性传至多端,一端的码作为多端实体对应的关系模式中的一个属性。(4)多对多的联系关系模式E-R图中的每一个多对多的联系可以转换为一个新的关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为新关系的属性,而关系的码为各实体码的组合,也称为联合码。,在PowerDesigner中可连接数据库,并根据上述PDM数据模型自动在数据库中创建案例数据库的表结构,如表3-13-9所示。关于创建数据库的具体方法和操作步骤将在第4章及其案例完善中介绍。,第4章数据库(Database),4.1管理数据库PowerBuilder本身提供的AdaptiveServerAnywhere数据库是一个完整的数据库管理系统,基于AdaptiveServerAnywhere数据库开发的应用系统可以直接移到网络环境下运行在其他数据库中。AdaptiveServerAnywhere数据库的创建简单易学,而且可以与PowerBuilder运行在同一台计算机上。本书案例选择SQLAnywhere10数据库,下面说明创建数据库过程。,4.1.1创建数据库,在PowerBuilder主窗口中,选中系统工具条的图标,打开数据库(Database)窗口,依次单击【ODBODBC】和【Utilities】左边的【+】号,使之展开,如图4-1所示。,选中【CreateASADatabase】,双击鼠标左键,弹出创建ASA数据库窗口,如图4-2所示。,AdaptiveServerAnywhere数据库在创建的同时系统自动配置ODBC数据源和描述文件(Profile),并连接数据库。如图4-3所示。,4.1.2删除数据源,在图4-3所示窗口中,选中要删除的数据源,单击鼠标右键,在弹出菜单中选择【Delete】,即可删除该数据源。注意:要删除的数据源必须处在断开连接状态。如果数据源处在连接状态,则选中数据源,单击鼠标右键,在弹出菜单中选择【Disconnect】,即可断开该数据源与数据库的连接。,4.1.3删除数据库,删除了数据源,但与此数据源连接的数据库仍存在。如果要删除数据库,则在图4-1所示窗口,选中【DeleteASADatabase】,弹出删除本地数据库窗口,如图4-5所示。,4.2连接各种数据库,4.1节中讲述创建ASA数据库时,系统自动配置ODBC数据源和描述文件(Profile),但如果创建其他数据库如Access、SQLServer、Sybase、Oracle等,就需要手工配置ODBC数据源和描述文件(Profile)。对于不同类型的数据源,PowerBuilder通过不同接口进行连接,连接方式有两种:(1)通过ODBC通用接口。(2)通过PowerBuilder为Sybase、Oracle、Informix、SQLServer提供的专用接口。,4.3管理数据表,4.3.1创建表1.创建表在图4-3所示窗口中,选中数据库描述文件,单击其左边的【+】号,使之展开,选中【Tables】,单击鼠标右键,在弹出菜单中选择【NewTable】,弹出定义表窗口,如图4-12所示。,定义完表中各列后,单击数据库工具条上图标,弹出创建新表对话框,如图4-13所示。,2.修改表在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要修改的表,单击鼠标右键,在弹出的快捷菜单中选择【AlterTable】,即可进入修改表窗口,基本操作同创建表。3删除表在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要修改的表,单击鼠标右键,在弹出的快捷菜单中选择【DropTable】,即可删除该表。,4.3.2设置表属性在图4-3所示窗口中选中【Tables】,单击其边的【+】号,使之展开,选中要设置属性的表,如“book”,单击鼠标右键,在弹出的快捷菜单中选择【Properties】,弹出表属性设置窗口。,4.3.3设置表中列属性在图4-3所示窗口中选中【Tables】,依次单击【Tables】、要设置列属性的表和【Columns】左边的【+】号,使之展开,选中要设置属性的列,如“b_pdate”,单击鼠标右键,在弹出的快捷菜单中选择【Properties】,弹出列属性窗口。,4.3.4设置表的主键,1.创建表主键在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要创建主键的表,单击鼠标右键,在弹出的快捷菜单中选择【New】/【PrimaryKey】,弹出主键窗口,【一般信息(General)】页如图4-25所示。,2.修改主键在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要修改主键的表,单击其左边的【+】号,使之展开,选中【Primarykey】,单击其左边的【+】号,使之展开,选中要修改的主键,双击鼠标左键或单击鼠标右键,在弹出的快捷菜单中选择【Properties】,弹出如图4-25所示的主键设置窗口,修改主键列即可。3.删除主键在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要删除主键的表,单击其左边的【+】号,使之展开,选中【Primarykey】,单击其左边的【+】号,使之展开,选中要删除的主键,单击鼠标右键,在弹出的快捷菜单中选择【DropPrimaryKey】即可删除主键。,4.3.5设置表的外键,1.创建表外键在图4-3所示窗口中,选中要创建外键的表,单击鼠标右键,在弹出的快捷菜单中选择【New】/【ForeignKey】,弹出外键窗口,包含【一般信息(General)】、【主键(PrimaryKey)】和【规则(Rules)】3个属性页,其中【一般信息】页如图4-26示。,2.修改外键在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要修改外键的表,选择【ForeignKey】,单击其左边的【+】号,使之展开,选中要修改的外键,双击鼠标左键或单击鼠标右键,在弹出的快捷菜单中选择【Properties】,弹出如图4-26、4-27、4-28所示的外键设置窗口,修改外键列即可。3.删除外键在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要删除外键的表,选择【ForeignKey】,单击其左边的【+】号,使之展开,选中要删除的外键,单击鼠标右键,在弹出的快捷菜单中选择【DropForeignKey】即可删除外键。,4.3.6设置表的索引,1.创建表索引在图4-3所示窗口中,选中要创建索引的表,单击鼠标右键,在弹出的快捷菜单中选择【New】/【Index】,弹出索引窗口,【一般信息(General)】页如图4-29所示。,4.3.7编辑表数据,在图4-3所示窗口中,选中【Tables】,单击其左边的【+】号,使之展开,选中要编辑数据的表,单击鼠标右键,在弹出的快捷菜单中选择【EditData】/【Grid】或【Tabular】或【FreeForm】,其中【Grid】、【Tabular】、【FreeForm】为数据三种显示方式,在介绍数据窗口时将详细讲解。弹出编辑表数据窗口,如图4-30所示。,4.4管理视图,4.4.1创建视图在图4-3所示窗口中,选中【Views】,单击鼠标右键,在弹出的快捷菜单中选择【NewView】,弹出选择表对话框,如图4-32所示。,4.4.2删除视图在图4-3所示窗口中,选中【Views】,单击其左边的【+】号,使之展开,选中要删除的视图,单击鼠标右键,在弹出的快捷菜单中选择【DropView】,即可删除该视图。,4.5管理数据库安全性,4.5.1用户1.创建用户在图4-3所示窗口中,选中【Users】,单击鼠标右键,在弹出的快捷菜单中选择【NewUser】,弹出创建用户窗口,【属性(Properties)】页如图4-37所示。,2.修改用户密码在图4-3所示窗口中,选中【Users】,单击其左边的【+】号,使之展开,选中要修改密码的用户,单击鼠标右键,在弹出的快捷菜单中选择【Properties】,弹出如图4-37所示的创建用户窗口,修改密码即可。3.删除用户在图4-3所示窗口中,选中【Users】,单击其左边的【+】号,使之展开,选中要删除用户,单击鼠标右键,在弹出的快捷菜单中选择【DeleteUser】即可。,4.5.2用户组,用户组是一组用户的集合,如果一些用户对数据库具有相同的操作权限,逐一授权很麻烦,可以将这些用户定义成用户组,通过向用户组授权将权限授予每一个用户。1.创建用户组在图4-3所示窗口中,选中【Groups】,单击鼠标右键,在弹出的快捷菜单中选择【NewGroup】,弹出创建用户组窗口,【属性(Properties)】页如图4-38所示。,4.5.3定义表的访问权限在图4-3所示窗口中,选中【Tables】,单击鼠标右键,在弹出的快捷菜单中选择【TableSecurity】,弹出表授权窗口,如图4-39所示。,在【Groups/Users】列表中选择用户组或用户,在【Tables】列表中选择表,在【Privileges】中定义用户组或用户对该表的操作权限,如果要指定表中列的修改权限,单击【Update】按钮,弹出列授权窗口,如图4-40所示。,第5章应用对象,5.1应用介绍5.1.1应用的概念应用也称应用程序,一般来讲,一个应用可完成一组相关的功能。在PowerBuilder中,应用是由一系列PowerBuilder对象组成,这些对象包括PowerBuilder的应用对象、窗口对象、数据窗口对象、菜单对象及用户对象等。有关各种对象将在后续章节中讲解。,5.1.2应用的存储层次结构在PowerBuilder中应用以一定的层次结构存储。WorkSpace,即工作区,是应用的顶层,以pbw为扩展名,自PowerBuilder8.0开始引入工作区和目标的概念,使得开发效率显著提高,大大地加强了开发Web应用以及分布式应用方面的功能,并可与企业应用服务器紧密集成,有了工作区和目标,使整个应用的结构更加明了。创建应用对象之前必须先创建工作区。Target,即目标,是应用的第2层,以pbt为扩展名,一个工作区中可以包含多个目标,创建应用对象的同时创建目标。,PowerBuilderLibrary,即应用库,是应用的第3层,以pbl为扩展名,是PowerBuilder提供的一种用于存储PowerBuilder应用的文件,是应用的物理存储方式。应用库指明应用存放的位置,应用中包含的PowerBuilder对象均存储在应用库中。一个完整的应用既可以存放在一个应用库文件中,也可以存放在多个应用库文件中。一个目标中可以包含多个应用库。Application,即应用对象,是应用的第4层,应用对象是用于标识应用的,应用对象是应用的入口和出口,每个应用有且只有一个入口和出口,所以只有一个应用对象。应用对象是PowerBuilder的一个特殊的对象,相当于C语言中的main()函数,应用对象定义应用级行为,如整个应用中的缺省字体,应用开始、结束和出现系统错误时的操作等。,5.2创建应用对象,5.2.1创建工作区进入PowerBuilder后,选择【File】/【New】,或单击工具条上的图标,弹出新建对象窗口,选择【WorkSpace】页,如图5-1所示。,选中【WorkSpace】图标,双击鼠标左键或单击【OK】按钮,弹出新建工作区对话框,如图5-2所示。,在【保存在】处选择路径,在【文件名】处输入文件名,【保存类型】不做修改。本教材案例工作区名为jxc,保存在“D:教材十一五教材PB十一五教材PB十一五教材案例应用程序”路径。单击【保存】按钮即可完成新工作区的创建。工作区创建成功后,在指定路径下出现jxc.pbw文件,该文件即为新建工作区文件。,5.2.2创建应用对象创建完了工作区后,开始创建应用对象,同时创建目标、应用库。进入PowerBuilder后,选择【File】/【New】,或单击工具条上的图标,弹出新建对象窗口,选择【Target】页,如图5-3所示。,选中【Application】图标,双击鼠标左键或单击【OK】按钮,弹出新建应用对象对话框,如图5-4所示。,创建完应用对象后,依次展开浏览窗口中的对象,选中应用对象,打开新建应用对象画板,如图5-5所示。,5.2.3管理应用结构创建完应用对象后,在PowerBuilder浏览窗口中,单击系统工具条中(SystemTree)图标,在系统树窗口即可显示应用的存储结构,如图5-6所示。,在系统树窗口中选中某目标,单击鼠标右键,在弹出的快捷菜单中选择【Properties】,弹出目标属性设置窗口,如图5-7所示。,5.3设置应用对象的属性在系统树窗口中选中应用对象jxc,双击鼠标左键或单击鼠标右键,在弹出的快捷菜单中选择【Edit】,弹出应用对象属性设置窗口,包含【一般信息(General)】和【工具条(ToolBar)】2个属性页,其中【一般信息】页如图5-8所示。,单击【AdditionalProperties】按钮,弹出应用对象附加属性窗口,包含【TextFont】、【ColumnFont】、【HeaderFont】、【LabelFont】、【Icon】、【VariableTypes】6个属性页,其中【TextFont】如图5-9所示。,选择不同的属性页,可分别设置字体(Font)、风格(FontStyle)、大小(Size)、文本颜色(TextColor)、背景颜色(Background)、效果(Effects),其中【Strikeout】为删除线,【Underline】为下划线。【Icon】页可设置应用对象的图标,如图5-10所示。,【VariableTypes】页可设置应用的缺省全局对象,如图5-11所示。,【工具条】页用于设置应用的工具条属性,如图5-12所示,主要属性如表5-4所示。,5.4编写应用级脚本,5.4.1应用对象的事件,5.4.2应用对象编程1.在应用的Open事件中连接数据库,并且打开应用主窗口。脚本如图5-13所示。,在PowerBuilder主窗口中选中系统工具栏的图标,系统打开DatabaseProfiles窗口,在窗口中单击【ODBODBC】,使之展开,选中要连接的数据源,如jxc,单击【Edit】按钮,弹出数据库描述文件配置窗口。选择【Preview】页,如图5-14所示。单击【Copy】按钮,即可将数据库描述文件拷贝下来,粘贴到应用对象open事件脚本窗口即可。,5.5应用执行,为应用对象编写完脚本后就可以运行该应用程序了,单击系统画笔中的图标运行应用程序,应用程序运行结果如图5-16所示。,5.6应用辅助画笔,PowerBuilder系统提供两个应用辅助画笔:Browser和Library。5.6.1Browser画笔单击PowerBuilder系统画笔的图标打开Browser画笔,选择【Users】页,选中应用对象,单击鼠标右键,在弹出的快捷菜单中选择【Expandall】,则该应用对象中包含的各种对象都显示出来,如图5-17所示。,5.6.2Library画笔,单击PowerBuilder系统画笔的图标打开Library画笔,选择应用库所在路径,选中应用库文件,该应用库中所有对象均显示在右侧列表中,如图5-18所示。,5.7应用程序的调试,5.7.1调试画板在PowerBuilder主窗口中,单击工具条上的图标可打开应用程序调试画板,进入调试方式;单击工具条上的图标可选择对象,并进入对象运行/预览方式;单击工具条上的图标可进入常规运行方式,如图5-19所示。,应用程序调试画板由四部分组成:左上角脚本查看区、右上角对象选择区、左下角变量查看区、右下角断点查看区。进入应用程序调试画板,出现应用程序调试画笔,主要功能如表5-6所示。,5.7.2调试程序的步骤,1.打开应用程序调试画板在PowerBuilder主窗口中,单击工具条上的或图标均可进入应用程序调试画板,如图5-19所示。2.选择调试对象在图5-19所示窗口的对象选择区中选择调试对象。在对象选择区中调试对象分为窗口、菜单、用户对象、函数等,并采用树形级联方式列出了各种对象的已编程事件和控件,如图5-20所示。,3.在应用程序中需跟踪脚本处设置断点在调试程序过程中,断点是应用程序脚本某处的一个标记(圆点),此标记用来中断一个应用程序的正常执行过程。在Debug窗口中断点分为两种:普通断点和特殊断点。普通断点是为中断正在执行的程序所设的标记;特殊断点是通过指定触发条件决定是否中断正在执行的程序。一般情况下,只需设置普通断点,关于特殊断点的设置方法的详细内容请读者参考相关参考资料。,4.在调试状态下运行应用程序单击应用程序调试画笔图标,应用程序开始执行,遇到第一个断点,程序自动停止,并在断点所在行程序开头标记黄色箭头。5.查看变量或表达式的值在变量查看区的【Local】页可以查看到局部变量在程序执行到断点处时的值。如果要查看在断点处全局变量、实例变量等其它类型变量的值,可以选择变量查看区的相应页。,6.继续执行或终止执行单击应用程序调试画笔图标,应用程序从黄色箭头处开始执行,直到遇到下一个断点或应用程序正常结束。单击应用程序调试画笔图标,应用程序终止执行。7.如有必要,可单步跟踪有时跟踪到断点处并不能发现问题,需要单步跟踪。单步跟踪有五种方式:单步跟踪至用户函数内部(StepIn)、单步跟踪并跨越函数内部(StepOver)、从函数内部一次执行完(StepOut)、执行至光标所在位置(RunToCursor)、将光标所在语句设置为下一条要执行的语句(SetNextStatement)。,8.如有必要,可增加或修改断点增加断点的方法同设置断点,不再赘述。修改断点主要包含设置断点的有效性和清除断点。设置断点的有效性的方法为:正常设置完断点后,行前的红色圆点为实心圆点,选中此圆点,单击鼠标右键,在弹出的快捷菜单中选择【DisableBreakpoint】即可将该断点设置为失效,此时行前的圆点为空心红色圆点。同样方法,如果一个断点为失效断点,单击鼠标右键,在弹出的快捷菜单中选择【EnableBreakpoint】即可将该断点设置为有效。清除断点的方法为:用鼠标左键双击断点所在行,或用鼠标右键单击断点所在行,在弹出的快捷菜单中选择【ClearBreakpoint】,即可将该断点清除。9.修改错误,重新运行应用程序。,第6章窗口对象,6.1管理窗口对象窗口对象是PowerBuilder应用的重要组成部分,是用户和PowerBuilder应用之间交互的主要界面。窗口对象主要用于显示各种数据、图片和提示信息,向用户请求信息以及对用户的鼠标或键盘操作做出反应等。PowerBuilder中所有窗口对象均是系统提供的Window类的子类。窗口对象的创建方法分为利用向导创建和继承创建两种。,6.1.1利用向导创建窗口对象进入PowerBuilder后,在系统树窗口中打开应用,选择系统菜单【File】/【New】,或单击工具条上的图标,出现新建对象窗口,选中【PBObject】属性页,选中【Window】图标,双击鼠标左键或单击【OK】按钮,即新建了一个窗口对象,缺省名称为Untitled。窗口对象画板如图6-1所示。,6.1.2设置窗口对象属性窗口对象属性包含【一般信息(General)】、【滚动条(Scroll)】、【工具条(Toolbar)】、【其他(Other)】4个属性页。【General】属性页主要定义窗口对象的外观风格,如图6-1所示,主要属性如表6-1所示。,窗口对象类型是窗口对象的一个重要属性,决定窗口对象的一些特性。窗口对象类型有主窗口(Main!)、子窗口(Child!)、MDI窗口(Mdi!)和带帮助的MDI窗口(MdiHelp!)、弹出式窗口(Popup!)、响应窗口(Response!)5种。【Scroll】属性页主要定义窗口对象的滚动信息,如图6-7所示,主要属性如表6-2所示。,【ToolBar】属性页主要定义窗口对象的工具条信息,如图6-8所示,主要属性如表6-3所示。,【Other】属性页主要定义窗口对象的位置和光标,如图6-9示,主要属性如表6-4所示。,设置完窗口对象的属性后,可以单击窗口对象画笔图标预览窗口对象的外观。确定后单击窗口对象画笔图标,出现窗口对象保存窗口,如图6-10所示。,6.1.3窗口对象属性的引用方法可以在脚本中引用窗口对象的属性,引用方法为:窗口对象名.属性,例如,“w_1.visible=false”表示设置窗口对象“w_1”为不可见,“w_main.width=400”表示设置窗口对象“w_main”的宽度为400。注意:PowerBuilder中各种对象的名称缺省前缀一般不做修改,以使其能够在名称上区分开。,6.1.4利用继承创建窗口对象继承是PowerBuilder面向对象特性的重要体现,使用继承能够非常方便有效地从已有的窗口对象创建新的窗口对象。1.利用继承创建窗口对象的方法在系统树窗口中选中祖先窗口对象,单击鼠标右键,在弹出的快捷菜单中选中【Inherit】,即可创建新窗口对象,此窗口对象继承祖先窗口对象的属性及脚本。在此基础上修改即可快速创建新窗口。,2.利用继承创建窗口对象的优点祖先窗口对象外观改变时,所有后代窗口对象均跟着改变。如果将祖先窗口对象中显示文本字体改为宋体,则后代窗口对象中此文本字体自动跟着改变。继承有利于保持应用中窗口对象外观的一致性,减少修改工作量。祖先窗口对象中程序改变时,如果事件改变或程序脚本改变,后代窗口对象中程序自动跟着改变,无需逐一修改,减少了修改工作量。,3.后代窗口对象中修改的限制对于利用继承方法创建的窗口对象,可根据需要对其进行修改。可做的修改修改窗口对象的属性。添加新控件。调整控件位置及大小。为控件添加事件处理程序。引用祖先的函数、事件和结构。定义自己的函数、事件和变量。不可做的修改不可做的修改只有一个:删除祖先控件。如果某控件在后代窗口对象中不需要,可在后代窗口对象中将其设置成不可见。,6.1.5查看继承层次进入PowerBuilder后,单击工具条中图标,出现目标浏览窗口,选中【Window】属性页,如图6-11所示。,6.1.6查看祖先脚本在脚本窗口中第三个下拉列表框中选中祖先窗口对象名称,相应的祖先脚本就显示出来,如图6-12所示。,6.1.7修改窗口进入PowerBuilder后,在系统树窗口中展开应用,选中某窗口,双击鼠标左键或单击鼠标右键,在弹出的快捷菜单中选择【Edit】,即可进入该窗口的修改状态,基本操作同创建窗口。如果要删除某窗口,选中该窗口,单击鼠标右键,在弹出的快捷菜单中选择【Delete】即可。,6.2窗口对象中的控件,6.2.1窗口对象控件概述PowerBuilder窗口对象控件是放置在窗口上的图形界面对象,用于用户与应用程序进行交互,用户可通过窗口上的控件来编辑数据、显示数据或修饰窗口等。窗口对象中控件很多,单击窗口对象画笔图标,出现窗口对象中所有控件。窗口对象控件可分为五种基本类型,每个控件系统均提供缺省名称前缀,如表6-5所示。,6.2.2在窗口对象上放置控件的方法在窗口对象画笔中点击某窗口控件,在窗口对象中想放置该控件的位置单击鼠标左键,该控件即显示在窗口对象上,可以进一步修改控件的属性,使其外观满足用户的要求。在窗口对象上放置一个控件就相当于创建了一个系统提供的该控件类的子类。,6.2.3对窗口对象上控件及其属性的引用对于窗口对象上控件的引用采用名称引用的方式,例如,窗口对象中有一数据窗口控件,名称为“dw_1”,则脚本中对该控件的引用均为“dw_1”。对窗口对象上控件属性的引用方法为:“控件名.属性”,例如,“rb_1.Checked=true”是对控件“rb_1”的属性“Checked”的引用,“dw_1.enabled=false”是对控件“dw_1”的属性“enabled”的引用。,6.2.4调整窗

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论