已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PowerBuilder 编程技巧与注意事项 夏仲方 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 事务 事务是作为单个逻辑工作单元执行的一系列操作 一个逻辑工作单元必须有四个属性 称为ACID 原子性 一致性 隔离性和持久性 属性 只有这样才能成为一个事务 原子性 事务必须是原子工作单元 对于其数据修改 要么全都执行 要么全都不执行 一致性 事务在完成时 必须使所有的数据都保持一致状态 在相关数据库中 所有规则都必须应用于事务的修改 以保持所有数据的完整性 事务结束时 所有的内部数据结构 如B树索引或双向链表 都必须是正确的 隔离性 由并发事务所作的修改必须与任何其它并发事务所作的修改隔离 事务查看数据时数据所处的状态 要么是另一并发事务修改它之前的状态 要么是另一事务修改它之后的状态 事务不会查看中间状态的数据 这称为可串行性 因为它能够重新装载起始数据 并且重播一系列事务 以使数据结束时的状态与原始事务执行的状态相同 持久性 事务完成之后 它对于系统的影响是永久性的 该修改即使出现系统故障也将一直保持 事务 PB中的事务介绍PB中事务对象 transactionobject sqlca可以自定义事务对象TransactiongTrans yzcxgTrans yzcx CreateTransactiongTrans yzcx DBMS PB中事务对象的属性 事务 PB中事务控制原理原理 sqlca AutoCommit开始一个事务 sqlca AutoCommit False结束一个事务 sqlca AutoCommit True提交一个事务 commit回滚一个事务 rollback注意 开始一个事务后 必须有相应的语句结束一个事务 开始事务 结束事务的语句必须在同一个函数或事件中 事务 HIS中的事务控制实现Gf Begin TransAction Sqlca ao Environment AutoCommit Falseifao Environment SQLCode0thenreturnFalsereturnTrueGf Commit TransAction sqlca CommitUsingao Environment ifao Environment SQLCode0thenreturnFalseao Environment AutoCommit Trueifao Environment SQLCode0thenreturnFalsereturnTrueGf Rollback TrnasAction sqlca RollbackUsingao Environment ifao Environment SQLCode0thenreturnFalseao Environment AutoCommit Trueifao Environment SQLCode0thenreturnFalsereturnTrue 注意事项 避免太多的连接 即同一个程序与数据库建立的连接不要太多 也不要用SETTRANS 函数设置DATAWINDOW的事务对象 应该用SETTRANSOBJECT 在程序中 不要动不动就用CONNECT和DISCONNECT在不更新数据时保持SQLCA AUTOCOMMIT为TRUE 避免当前事务一直处于激活状态 影响别的事务 缩短一个事务更新数据的时延 若在事务中有运算 应先在本地全部做好 再用DataWindow一次性更新 避免在事务中使用类似Messagebox等需要用户响应的函数 防止锁表的发生 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 事件 用户事件 PowerBuilder的窗口 控件 用户对象等都有一组系统预先定义好的事件 打开某对象相关联的代码编辑器后 在事件列表框中就会看到这组事件 一般来说 这些系统预定义事件能够满足应用程序的大多数需求 然而 有时候应用程序中对象间需要灵活的通讯 此时 开发人员可以根据需要为对象定义自己的事件 这类事件就称做用户事件 事件 用户事件 用户事件的使用场合解决用户对象与窗口之间的通讯问题 用户事件可以通过参数进行信息传递 响应特殊操作 这些操作没有相应的PowerBuilder预定义事件 例如 我们希望用户按下Enter键后将输入焦点从一个单行编辑框移动到下一个单行编辑框 正常情况下需要按Tab键 再如 在数据窗口控件中 当用户输入焦点定位在最后一行后 再按Enter键时插入一个空行等 支持用户通过多种方式完成同一个功能 如在更新数据库时 即充许用户通过单击窗口上的按钮完成 也允许用户通过选择菜单项完成 事件 用户事件 事件标识 EventID 事件标识是系统预先定义的标识符 它对应于某个事件 PB使用以pbm 为前缀的事件标识 每个事件标识都对应于特定的windows消息 这样当应用程序运行时 通过触发Windows消息 从而触发PB中相应的事件 当不需要和Windows中的消息对应时 可以选择pbm custom01到pbm custom75之间的定制事件 也可以不选 让EventID空着 或选择None 注意 Other事件对应所有未映射成PB事件的Windows消息 因此 在Other事件中编写代码将显著地降低应用程序的性能 事件 用户事件 用户事件的使用对应于某个Windows消息的 当相应动作在应用程序上发生时 该事件会被自动触发 不对应于任何windows消息的 必须由代码触发该事件 事件 用户事件 触发用户事件的方法TriggerEvent PostEvent Objectname Trigger Static Dynamic EventEventName argumentlist Objectname Post Static Dynamic EventEventName argumentlist TriggerEvent 语法 objectname TriggerEvent Event word long 例如 cb Ok TriggerEvent Clicked 或Parent TriggerEvent ue Init Word和long是两个可选参数 触发事件后其值将分别保存到系统全局对象message的wordparm和longParm属性中 函数或事件的处理程序 Cb Ok TriggerEvent Clicked Clicked事件处理程序 PostEvent 语法 objectname PostEvent Event word long TriggerEvent 与PostEvent 的区别 TriggerEvent 如同函数调用 它等待被调用者执行完毕后才继续运行 通常称这种调用为同步调用 PostEvent 相当于发送一个请求执行的信号 接着还是执行自己的程序段 当自己的程序段执行完后才执行被调用者的代码 即邮寄一个事件 通常也称为异步调用 PostEvent 不能用于应用对象 Application 当需要使用事件的返回值时 不能使用PostEvent 两者都不能用于没有事件的对象如绘图对象 直线 椭圆等 函数或事件的处理程序 Cb Ok PostEvent Clicked Clicked事件处理程序 Objectname Trigger Static Dynamic EventEventName argumentlist 表示立即执行指定事件的事件处理程序 然后再执行该语句后面的代码 Trigger可省略不写 Static和Dynamic选项只能选择一个 缺省时为Static Static表示编译时指定事件必须存在 系统要进行返回值类型的检查 Dynamic表示编译时指定事件可以不存在 系统把返回值类型的检查推迟到应用程序运行时进行 Trigger Static Dynamic Event三者次序可以任意放置 Objectname Post Static Dynamic EventEventName argumentlist 表示将指定的事件放在对象的事件队列中 然后继续执行该语句后面的代码 至于发出去的事件的事件处理程序何时执行 由操作系统决定 Static和Dynamic选项只能选择一个 缺省时为Static Static表示编译时指定事件必须存在 系统要进行返回值类型的检查 Dynamic表示编译时指定事件可以不存在 系统把返回值类型的检查推迟到应用程序运行时进行 Post Static Dynamic Event三者次序可以任意放置 Trigger Post的使用实例 Gf Center Window this Dw 1 SetTransobject sqlca Dw 1 Retrieve 窗口Open事件中的代码 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 函数 如同事件 可以用trigger post触发函数中的程序段 函数的返回值最多只能指定一个 当需要有多个返回值时 可以使用参数 以传址方式定义 参数传递方式说明 Value 传值 将实际参数的值传递给函数 Reference 传地址 把实际参数的地址传递给函数Readonly 传地址 不允许修改参数的值 函数 同名异构函数 全局函数不能使用同名异构函数主要使用于窗口函数 用户自定义对象中的函数 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 窗口 窗口的类型 Main 主窗口Popup 弹出式窗口Response 响应窗口窗口的位置 平铺居中窗口的大小 使用resize事件 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 数据窗口 类型 数据源 显示风格 数据窗口 更新方式 数据窗口 更新方式 WHEREClauseforUpdate Delete 告诉PB如何生成SQL语句的WHERE子句 KeyColumnsKeyandUpdateableColumnsKeyandModifiedColumns 数据窗口 更新方式 KeyColumns数据窗口只使用 UniqueKeyColumns 列表框中选择的主键列来构造WHERE子句 该选项经常在单用户应用程序环境中使用 举例 UpdateYK TYPKSETYPMC 青霉素钠针 WhereYPXH 5 UpdateYK TYPKSETYPMC 青霉素钠 WhereYPXH 5 特点 多个用户可以同时访问和修改数据库 保证了高并发性 不能保证数据的完整性 数据窗口 更新方式 KeyandUpdateableColumns数据窗口使用 UniqueKeyColumns 列表框中选择的主键列和 Updateablecolumns 中选定的更新列来构造WHERE子句 举例 UpdateYK TYPKsetYPMC 青霉素钠针 WhereYPXH 5andXTSB 1ANDYPMC 青霉素 andYPGG 80万u UpdateYK TYPKsetYPMC 青霉素钠 WhereYPXH 5andXTSB 1ANDYPMC 青霉素 andYPGG 80万u 特点 降低并发性 保证数据的完整性 数据窗口 更新方式 KeyandModifiedColumns数据窗口使用 UniqueKeyColumns 列表框中选择的主键列和 Updateablecolumns 中选定的更新列中已修改过的列来构造WHERE子句 举例 UpdateYK TYPKsetYPMC 青霉素钠针 WhereYPXH 5ANDYPMC 青霉素 UpdateYK TYPKsetYPMC 青霉素钠 WhereYPXH 5ANDYPMC 青霉素 特点 可同时修改同一行不同列的数据 提高操作的并发性 当修改不同行或同一行同一列的数据时 不能保证数据的完整性 数据窗口 灵活控制 数据窗口 导入导出 数据窗口对象的容器 数据窗口控件 第一步 定义实例变量 第二步 在数据窗口的dberror事件中编写脚本 Gf Begin Transaction sqlca Ifdw 1 Update 1thengf Rollback Transaction sqlca Messagebox 提示 数据保存错误 请与管理员联系 is ErrorText ReturnEndIfGf commit Transaction sqlca 第三步 修改保存按钮中的提示语句 思考 DataStoreUpdate时 如何显示错误消息 Gf Begin Transaction sqlca Iflds ypxx Update 1thengf Rollback Transaction sqlca Messagebox 提示 数据保存错误 请与管理员联系 ReturnEndIfGf commit Transaction sqlca DataStorelds ypxxLds ypxx CreateDataStoreLds ypxx DataObject d typk Lds ypxx SetTransobject sqlca Lds ypxx Retrieve 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 用户对象的概念 用户对象是封装了一组相关代码和属性 完成特定功能的对象 用户对象只需定义一次 就能反复使用多次 并且修改一次 就能把修改结果反映到所有使用该用户对象的地方 用户对象的优势 避免了在应用程序的不同地方编写功能相同或相近代码的麻烦 提高了应用程序的可维护性 用户对象可以把一组总在一起使用的可视控件组合在一起 构成一个完成特定功能的控件 应用程序可以在需要的地方随时使用它 用户对象提供了构造具有一致外观可视部件的方法 用户对象能够把相关功能封装在一起 用户对象允许开发人员扩展某些PB系统对象 比如事务对象 的功能 用户对象的创建 用户对象的分类 类用户对象 可视用户对象 用户对象 类用户对象 使用时需要先定义对象的类型 并用Create语句创建 不再使用时 用destory语句删除对象 以释放内存空间 u hzyblu hzyblu hzyb Createu hzyb Destroylu hzyb 自动实例化 u hzyblu hzyb lu hzyb Createu hzyb Destroylu hzyb 思考 DataStoreUpdate时 如何显示错误消息 Gf Begin Transaction sqlca Iflds ypxx Update 1thengf Rollback Transaction sqlca Messagebox 提示 数据保存错误 请与管理员联系 ReturnEndIfGf commit Transaction sqlca DataStorelds ypxxLds ypxx CreateDataStoreLds ypxx DataObject d typk Lds ypxx SetTransobject sqlca Lds ypxx Retrieve 1 做一个用户对象 标准类 选择 选择DataStore 点OK就生成一个标准类 用户对象 然后定义一个实例变量 is ErrorText 并在事件列表中 选择dberror事件 写上以下代码 Is ErrorText errortextReturn1 保存该用户对象 并命名为u datastore 2 当使用datastore更新数据时 使用如下方法 Gf Begin Transaction sqlca Iflds ypxx Update 1thengf Rollback Transaction sqlca Messagebox 提示 数据保存时出现以下错误 lds ypxx is ErrorText ReturnEndIfGf commit Transaction sqlca DataStorelds ypxx Lds ypxx CreateDataStoreu DataStorelds ypxxlds ypxx Createu DataStorelds ypxx DataObject d typk lds ypxx SetTransobject sqlca lds ypxx Retrieve 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 关于继承 可继承的对象 窗口 菜单 用户对象事件的执行顺序 从祖先到子孙事件的重载 函数的重载 增加一同名同构函数 培训内容 事务 Transaction 事件 Event 函数 Function 窗口 Window 数据窗口 DataWindow 用户对象 UserObject 继承嵌入式SQL 书写嵌入式SQL时的注意事项 在Where字句中检索字段上加索引 若为多字段联合检索 可在这些字段上加复合索引 并且在书写SQL语句时 And语句中的字段应按复合索引中的字段的先后顺序 否则索引会失效 例如 在ZY BQYZ表中加了在XMLX YPLX复合索引 检索语句应写型如 XMLX 1ANDYPLX 0 而不是YPLX 0ANDXMLX 1 避免使用SqlServer函数 如DateDiff 函数会使索引失效 例 原SQL语句 DATEDIFF DAY TZSJ GETDATE 0优化的Sql语句 变量申明datetimeldt datebegin ldt dateendldt datebegin datetime date gf server date time 0 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学26年:产学研医协同创新 查房课件
- 26年抗拒洗澡老人应对技巧课件
- 语文01卷(广东广州专用)-(参考答案)七年级下册语文期末考试
- 施工安全培训安全管理网
- 七年级语文上册第二单元7散文诗两首习题
- 【高中语文】+高考语文考前指导
- 幼儿安全宣传日
- 记账实操-承包业务的会计分录
- 煤炭开采合同协议2026年安全版
- 3.2做自尊的人课件 2025-2026学年统编版道德与法治七年级下册
- 景德镇市检察机关2026年公开招聘司法辅助文员工作【26人】笔试参考题库及答案解析
- 2026届天津市东丽区重点中学中考押题历史预测卷含解析
- 2026广东惠州惠城区桥东街道招聘党建联络员和村(社区)“两委”班子储备人选11人笔试参考题库及答案详解
- 北京市西城区2026年高三模拟测试(二模)英语试卷(含答案)
- 2025年全国金属非金属矿山企业主要负责人考试练习题有答案
- 2026年北京各区高三语文一模作文题汇编(高考趋势题附标杆文)
- 储能电站电池热失控火灾应急演练脚本
- 简阳市中小企业融资担保有限公司2026年招聘金融科技部工作人员等岗位笔试参考题库及答案解析
- 2026上海市闵行区区管国企招聘42人备考题库含答案详解(精练)
- 保洁12小时工作制度
- 输变电工程可行性研究内容深度规定(2025版)
评论
0/150
提交评论