《PB培训教程(提高篇).ppt》由会员分享,可在线阅读,更多相关《PB培训教程(提高篇).ppt(57页珍藏版)》请在课桌文档上搜索。
1、PB培训教程(提高篇),前言,本教程的内容第一章 PB的发展第二章 数据窗口第三章 调试及跟踪第四章 编码规范第五章 辅助工具本教程适合的人群对PB有基础概念有一定的开发经验乐于分享、学习、提高,第一章 PB的发展,本章内容PB6新特性PB7新特性PB8新特性PB9新特性PB10新特性,PB的发展PB6新特性,PB6新特性整体性能增强Internet增强分布式计算增强开发效率的增强扩展的多种语言支持交叉平台支持PowerScript语言增强数据窗口增强数据库连接增强OLE增强应用程序发行方面的增强其他增强参见PowerBuilder6.0开发人员指南,PB的发展PB7新特性,PB7新特性崭新的
2、用户界面和开发方法组件开发和部署方面的新特性数据连接方面的新特性其他新颖的特性参见PowerBuilder7参考手册,PB的发展PB8新特性,PB8新特性用户界面Web功能数据窗口新特性EAServer的集成数据库连接PowerScript新特性进一步提高的易用性和其他增强特性参见PowerBuilder8参考手册,PB的发展PB9新特性,PB9新特性先进的 4GLPLUS 基础 多样的适用性 利用集成开发与设计获得优异的成果 不断增加的强大功能 参见创造最佳的开发环境 Sybase PowerBuilder9.0,PB的发展PB10新特性,PB10新特性集成PowerDesignerXML
3、Web DataWindowDataWindow.NETUnicode support新的控件各式各样的变化数据连接的改变参见PowerBuilder10新特性,第二章 数据窗口,本章内容常见问题函数和事件缓冲区状态位并发控制数据拷贝小技巧,数据窗口常见问题,数据窗口函数和事件,AcceptText,DeleteRow,Clicked,Rowcount,DoubleClikced,GetItemDate etc,GetRow,InsertRow,Constructor,Reset,Retrieve,SetItem,Sort,Update,EditChanged,Error,ItemChange
4、d,SQLPreview,数据窗口缓冲区1,存放填充窗口中DataWindow控件中数据的,调用DataWindow的Retrieve()函数和InsertRow()函数可以将数据填入这个缓冲区中,存储的是从Original Buffer使用Filter()函数过滤到Primary Buffer中后剩余的记录,保存的是用DeleteRow()函数从Primary Buffer中删除的记录,存储的是DataWindow最初执行retrieve()函数时得到的全部记录,Filter,DeleteRow,InsertRowRetrieve,Retrieve,DataWindow有四个缓冲区,数据窗口
5、缓冲区2,dw_1.object.xh1获取数据窗口的主缓冲区的第一行的xh列的值dw_1.SetItem(1,ghdw,浙江联众)为数据窗口主缓冲区的第一行的ghdw列赋值dw_1.object.xh.filter1获取数据窗口过滤缓冲区的第一行的xh列的值dw_1.object.data.primary.current访问主缓冲区dw_1.object.data.primary.original访问原始缓冲区dw_1.object.data.filter.current访问过滤缓冲区dw_1.object.data.delete.current访问删除缓冲区,缓冲区的访问,数据窗口缓冲区3
6、,函数使用与缓冲区的变化,Demo1,Demo1演示DataWindow的四个缓存区,DEMO,数据窗口状态位1,数据窗口的四种状态位NotModified该行或行的值为查询所得,没有发生改变 DataModified该行或列的值为查询所得,发生了改变 New该行或列为一插入的新行,数据没有发生改变(数据为空或缺省值)NewModified该行或列为一插入的新行,数据发生改变,改变是通过用户键盘输入或调用了SetItem()函数,数据窗口状态位2,获取数据窗口的行的状态GetItemStatus(row,column,Dwbuffer)返回值:枚举类型dwItemStatusNew!NewMo
7、dified!NotModified!DataModified!例:下面的代码返回主缓冲区第一行的ghdw列的状态DwItemStatues l_statusl_status=dw_1.GetItemStatus(1,0,Primary!),数据窗口状态位3,设置数据窗口的状态位SetItemStatus(row,column,Dwbuffer,status)例:下面的代码设置主缓冲区第一行的ghdw列的状态为NotModified!dw_1.SetItemStatus(1,ghdw,Primary!,NotModified!)注:并不是所有的状态都可以设置成功!满足下面规则,Demo2,De
8、mo2演示DataWindow的四种状态位,DEMO,数据窗口并发控制1,并发控制 指多用户在同一时间对相同数据同时访问的能力,一般的关系数据库都具有并发控制的能力,PB中用DataWindow的设置来进行并发控制,并发控制区域,数据窗口并发控制2,Where Clause for Update/Delete1 选项“Key Columns”比较更新前后Table的关键字是否发生了变化,即当前数据库中关键字的实际值和最初查询的值做比较,如果没有改变,则可以更新,反之不能更新 因为关键字xh=1没有发生变化,Where条件成立,更新成功!但没有达到并发控制的目的!,示例:修改序号为1的入库单的金
9、额改为3000(原金额为2000),Update wz_rkd Set je=3000 where xh=1;,数据窗口并发控制3,Where Clause for Update/Delete2 选项“Key and Updateable Column”比较更新前后Table的关键字和可修改(更新)的列值是否发生了变化,如果没有一项发生改变,更新成功;反之,若数据库中当前值中若任一项与数据窗口最初检索出的值不一致,则更新失败,示例:修改序号为1的入库单的金额改为3000(原金额为2000,假设所有列都是可更新的),Update wz_rkd Set je=3000 where xh=1 and
10、 fsdm=采购入库 and ghdw=浙江联众 and je=2000 and bz=;,数据窗口并发控制4,Where Clause for Update/Delete2 选项“Key and Updateable Column”上例中,假设在A用户修改的同时,B用户将可修改列之一je的值由2000变为了的2500,where条件不成立,因此更新失败,并弹出出错信息如下,数据窗口并发控制5,Where Clause for Update/Delete3 选项“Key and Modified Columns”比较更新前后Table的关键字和要修改(更新)的列值是否发生了变化,如果没有改变,
11、更新成功,反之更新失败。对于本例,即判断关键字xh和将要修改字段je是否发生变化 上例中可修改(更新)列之一je的值经修改存盘后,已由2000变成了当前的2500,where条件不成立,因此更新失败,但是,如果改变了其他字段的值,比如ghdw,此更新能够成功,示例:修改序号为1的入库单的金额改为3000(原金额为2000),Update wz_rkd Set je=3000 where xh=1 and je=2000;,数据窗口并发控制6,并发控制总结Key Columns该选项在控制数据完整性方面最弱,它所允许的并发操作是最多的,所禁止的并发操作发生的可能性非常小,只有当主键被更改后才起并
12、发控制作用,当一条记录的关键字改变了才进行控制,这显然没有多大意义。实际上这种方法一般只在单机版的应用程序中使用,而在C/S模式中是很少使用的Key and Updateable Columns该选项是PB的默认选项,控制最为严格,可以实现最安全的并发控制,充分保证数据的完整性,但它也会禁止我们做一些本当允许的并发修改,是并发能力最差的方法Key and Modified Columns该选项可以说是前两者的折衷,在控制数据完整性和严格性方面比第一项强,比第二项弱,在允许的并发操作数量方面比第一项少,比第二项多,数据窗口并发控制7,数据窗口Update其他属性Key ModificationU
13、se Delete then Insert数据行先被删除,然后,重新插入新的数据行注意:这个选项要求用户选择从数据库检索出所有的列Use Update直接修改数据行Unigue Key Column修改时唯一键Identity Columns标识列,由DBMS自动产生的流水号列,如果选中该列,不能修改该列,Demo3,Demo3演示DataWindow的并发控制,DEMO,数据窗口并发控制8,数据窗口的Update函数与状态位的关系在实际中,经常需要在一个事务中同时更新主数据窗口和明细数据窗口,例如,同时更新入库单和入库单明细两个数据窗口时,经常会写下面的语句:,If dw_rkd.Updat
14、e(True,false)=1 then If dw_rkdmx.Update(True,false)=1 then dw_rkd.ResetUpdate()dw_rkdmx.ResetUpdate()Commit;Else Rollback;End IfEnd If,数据窗口并发控制9,Update(Boolean,Boolean)的参数第一个参数Boolean,指定Update之前是否自动执行AcceptText函数,True表示自动执行(缺省值)第二个参数Boolean,指定更新数据库之后是否自动复位更新标志,True表示自动复位更新标志若第二个参数设置成False,必须调用ResetU
15、pdate()清除更新标志Resetupdate()函数清除数据窗口的主缓冲区、过滤缓冲区的更新标志,并清空删除缓冲区,Demo4,Demo4演示DataWindow的Update函数,数据窗口数据拷贝,PB提供的几种数据拷贝方法的比较,Demo5,Demo5演示DataWindow的几种数据拷贝方式和性能,DEMO,数据窗口小技巧1,小技巧1可以通过数据窗口的SQLPreview事件查看数据窗口发送给数据库的Sql语句,SQLPreview事件的参数的含义如下,数据窗口小技巧2,小技巧2查看SQL语句中的数据(可以通过DBMS的DBParm参数设置来查看数据,DBParm中有一个Disabl
16、eBind变量,该变量的含义是在SQLSyntax参数所返回的语法串中所有实际数据的位置上是否一“?”号代替),第三章 调试及跟踪,本章内容异常处理DebugTrace View,调试及跟踪异常处理1,异常处理(Exception)为什么要进行异常处理?异常异常是指程序在运行过程中错误事件,比如除数为0、数组越界、空对象引用等等,这些事件的发生将会阻止应用程序的运行,为了提高程序的健壮性,在程序设计时,应该考虑到可能发生的异常事件,并在应用程序中做出相应的处理设计良好的异常处理可以让应用程序有计划从错误中恢复出来,继续进行处理,摆脱因错误而导致的应用程序中断,调试及跟踪异常处理2,没有异常处理
17、的程序,程序被强行退出进行异常处理后的程序,程序可以继续运行,调试及跟踪异常处理3,PB中的异常处理对象,Throwable,Exception,RuntimeError,DivideByZeroError,NullObjectError,DWRuntimeError,OLERuntimeError,CORBASystem,调试及跟踪异常处理4,PB中的异常处理语句Try/可能发生异常的语句Catch/异常类型1 异常对象变量/处理异常情况的代码Catch/异常类型2 异常对象变量/处理异常情况的代码/Finally/执行公共处理部分(不管是否发生异常都会执行这段代码)End Try,Demo
18、6,Demo6演示捕获异常,DEMO,调试及跟踪 Debug,调试工具DebugView简介是一种第三方的调试工具,能在代码中输出变量的值到一个实时刷新的界面中,我们在编写代码时,在一些关键的地方输出一个信息,特别是当程序已经编译成EXE之后,可以通过该工具查看程序的运行情况如何使用只需使用一个API函数(OutputDebugStringA)像该工具中发送信息,在程序运行时打开该工具就可以了建议自己重新封装OutputDebugStringA函数,因为该函数默认的只能传入字符串变量,自己封装之后,可以传递任何类型的变量,甚至是DataStore(编码将DataStore的数据转换成字符串),
19、实际中使用最多的情况也是查看Datastore中的数据(在基础类库中已经进行了封装,参见 nvo_debug对象),Demo7,Demo7演示Debug View的使用,DEMO,调试及跟踪 Trace View1,Trace的主要目的通过对程序的性能跟踪,分析程序各部分的消耗,以编写高效的代码,调试及跟踪 Trace View2,打开Trace工具的两种方式方式一:开发环境中预先设置,Trace开关,Trace文件存放路径,调试及跟踪 Trace View3,打开Trace工具的两种方式方式二:使用PB的函数打开TraceEnableActivityTraceBeginTraceEndTra
20、ceClose建议:使用第二种方式更有意义,因为可以跟踪其中的某一段代码,找出代码中比较慢的原因,调试及跟踪Trace View4,跟踪结果的几种浏览方式方式一:Profiling Closs从对象的角度查看方式二:Profiling Routine View从对象、方法的调用次数查看方式三:Profiling Trace View从对象总体消耗查看,Demo8,Demo8演示Trace View,DEMO,第四章 编码规范,本章内容控件命名规则代码命名规范大小写规范注释规范缩进规范建议,编码规范控件命名规范,参照PB默认设置例如:CommandButton cb_DataWindow dw_
21、RadioButton rb_ SingleLineEdit sle_ StaticText st_ TreeView tv_UserObject uo_,编码规范代码命名规范,基本命名原则前缀_功能或作用描述与数据库保持一致对象:w_ d_ ds_ m_ uo_函数:af_ gf_ wf_ mf_ uf_变量前缀全局变量ggi_XiTongXH局部变量lls_XiTong实例变量iis_CanShuMC共享变量ssi_ChuangKouXH,编码规范大小写规范,SQL语句UpperFirstSelect、Into、Where 保留字 UpperFirstIf ThenElseEnd If 预
22、定义类型 UpperFirstString、Long 内置函数 UpperFirstMessageBox 其他除前缀外首字母大写 gi_XiTongXH、ls_XiTongMC,编码规范注释规范,源代码文件的注释在文件的头部必须标明程序名称,它所完成的主要功能。文件的作者,及完成时间。阶段测试结束后,主要修改活动的修改人、时间、简单原因说明列表。维护过程中需要修改程序时,应在被修改语句前面注明修改时间和原因说明。函数或过程的注释在函数头部必须对函数进行功能和参数(值参、变参)说明;在函数的主体部分,如算法复杂时,应以注释的方式对其算法结构作出说明;函数申请过全局资源且有可能导致资源紧张应加以注
23、明(如内存,文件柄等);函数有副作用一定以十分醒目的方式(如加!号等)注明;函数的长度在100语句行以内(不包括注释),程序有特殊要求时(如速度要求等)可以例外。语句的注释应对不易理解的分支条件表达式加注释;不易理解的循环,应说明出口条件(有GOTO的程序还应说明入口条件);过长的函数实现,应将其语句按实现的功能分段加以概括性说明;供别的文件或函数调用的函数,绝不应使用全局变量交换数据。常量和变量的注释被保存值的含义(必须)合法取值的范围(可选)全局变量、实例变量需要对以上逐点做充分的说明。自制对象的注释标注制定对象的用途。标注制定对象的制定人员。标注制定的时间或者修改时间。,编码规范缩进规范
24、,范例If expression Then statementsElse statementsEnd If任何一个程序最大行宽不得超过80列,超过者应折行书写。建议一个函数的缩进不得超过5级,超过者应将其子块写为子函数;算法或程序本身的特性有特殊要求时,可以超过5级。缩进建议采用空格代替TAB。,编码规范建议,不使用Goto语句定义变量一行一个,在需要的时候定义一行超过80个字符需换行显示合理使用空行和空格,使代码更加清晰等号()左右均使用一个空格函数参数格开的逗号(,)后使用一个空格缩进三个空格,不使用Tab制表符,第五章 辅助工具,本章内容DWSyntaxDebugviewPBDeltaPBComment,辅助工具工具介绍,谢谢,