PowerBuilder技巧和窍门

您可以信赖的技术

我在Techwave 2006上的演示主要面向初学者和有一定经验的PowerBuilder开发人员。作为一名有着12年经验的PowerBuilder开发人员,我希望能够和大家一起来分享使用这些有用的技巧和窍门。

我从1994年的开始使用PowerBuilder 3.0,那时还没有PFC,实际上"class library(类库)"的概念那时还是一个新名词。 我们不得不使用PowerBuilder本身来从头开始创建每一个对象,特别的是,DataWindow使RAD(快速应用开发)变得真正的高效起来。下面让我们 从一些简单有用的例子开始吧。

将Tabular DataWindow转换为Grid DataWindow
也许这是一个最有用的小窍门了,它可以将tabular DataWindow转换为grid DataWindow,反之亦然。在PowerBuilder 9.x版本里,您可以右键单击一个对象来编辑源文件(edit source),这比先前必须将教本导出再导入要简单的多。要将一个tabular DataWindow转换为grid DataWindow,只需要在library painter中右键单击DataWindow对象,在弹出菜单中选择Edit Source,打开script editor,变量"processing"控制着DataWindow的显示类型,将值改为1,DataWindow会变成grid,改为0,DataWindow就会变成tabular。

将DataWindow数据源从Select语句改变为Stored Procedure(存储过程)
这也是一个非常有用的技巧。它涉及一些基本的技术。首选,创建或者确定一个合适的Stored Procedure,然后用这个Stored Procedure作数据源创建一个新的DataWindow。在library painter里,右键单击这个DataWindow,在弹出菜单中选择Edit Source,打开script editor,定位到以“Procedure”开头的行。

确保整行都被选中,将该行拷贝到剪贴板,然后找到您希望将数据源更改成存储过程的DataWindow。同样使用Edit Source打开script editor,定位到以“Retrueve”开头的行。
仍须选中整个行(它也许不止一行)。现在将整个Retrieve语句替换为剪贴板中的Procedure语句。关闭script editor,您现在就拥有了一个基于Stored Procedure的DataWindow。
为什么说这个技巧非常有用呢?这个技巧使您既可以保留DataWindow的设计又可以利用stored procedures。尤其是在您有许多基于SQL语句的DataWindow在数据库不断增长直到面临性能问题的时候。这项技术不仅节省了开发人员的大量时间,还能够保留原有的DataWindow界面,而用户丝毫不会察觉。

用stored procedure来更新DataWindow
当DataWindow的数据源变成stored procedure,Datawindow的更新能力就丢失了。这让很多开发人员不愿用stored procedure作为DataWindow的数据源。很多年以来,我一直避免使用stored procedure也是出于这个原因。无论如何,"Stored Procedure Update"功能是奇妙的。首先,确定或者创建一个用于更新,插入,删除记录的stored procedures。打开DataWindow对象,从菜单栏上选择Rows > Stored Procedure Update。
在Tab页面上分别为insert,delete,update选择选择用于对应的存储过程。PowerBuilder会逐行列出stored procedure的参数,您可以为每个参数配置对应的DataWindow Column。
在stored procedure update配置完成后(可能需要保存并退出DataWindow Painter,然后重新打开),选择菜单 Rows>update properties,您会发现"Stored Procedure"如同一个正常的表名一样出现在”Table to Update”下拉列表中。

如果您希望更新多张表,stored procedure update是一个很好的选择。任何一个利用过重置update标记等方法来完成多表更新的开发人员无疑会发现这种方法的非常的有价值。

在Powerscript中从stored procedure接收数据
随着stored procedures的频繁使用,您肯定也希望能够直接在Powerscript中直接通过stored procedures来获取数据。典型的,在Powerscript中,我们使用datastore来完成这个任务。使用stored procedures的最终结果就是可以减少一些DataWindow对象的存在。而且它允许更多的代码复用,相同的procedure既可以在后端完成一个”Get”的请求,也可以用于前端的数据展示。如需在Powerscript中利用stored procedure接收数据,请参照以下脚本。

OpenUserObjectWithParm
许多年前我曾在PowerSoft担任技术顾问。有一次在参加PowerSoft咨询会议的时候,无意中听到一个客户希望能够得到一些有关使用OpenUserObjectWithParm函数的一些建议。那个技术顾问从未听说过这个函数。我永远难忘那次会谈,它使我确信OpenUserObjectWithParm这个函数在很大程度上被大家忽略了。其实这个函数非常的有用,它允许你向一个user o b j e c t传递参数,告诉它在Window上的什么位置来自行创建,它被存储在usero b j e c ts数组中的位置(可在runtime进行操作,window.control[]),还有开发人员能够想到的任何其它的参数。举个简单的例子,我们打开一个DataWindow,并允许用户从一个calendar对象中选择日期。

下面这行代码位于Window的Open事件中,它将创建一个类型为uo_drop_down_calendar的usero b j e c t,x,y座标分别为25,50,并且标题显示为"Begin Date"。

OpenUserObjectWithParm(iuo_begin, 'Begin Date', 25, 50)

这个技巧还有很多其他的用处。

SQL Tool
有很多次,在作PowerBuilder应用的技术支持时,我们需要检测和定位一些关于数据的问题,但我们并不总可以连接到产品的数据库上。这种情况下,在前端的PowerBuilder应用中以系统管理员的身份执行SQL语句的方法就派上用场了。我为此编写了一个很有用的工具软件。

您可以从dropdown DataWindow中任意选择数据库表和字段名,轻松的构建需要的SQL语句而不用担心记不住那些字段的名字。还可以将SQL语句保存起来以备日后使用。例如,您的用户需要找出数据库中所有的可用的address类型。它很简单,您可以通过创建SQL语句来演示给他或她看。

用户将一条SQL语句输入到DataWindow中,然后点击"Execute(执行)",检索结果就会出现在下面的区域。用户还可以将数据结果另存为Excel等等。

如果用户需要更详细的SQL语句,您可以写下来然后e-mail给他,用户只需要拷贝粘贴到窗体里就可以执行了。这种方法可以用于清理数据库问题,创建或执行stored procedures,创建特别的报告,甚至授权,您可以在enterprise manager作几乎任何事情。这个工具软件非常的有用,无论如何,要小心的使用,以免用户创建笛卡儿积或者恶意的更新数据。

保存动态创建的DataWindow
让我们再深入讨论这个工具(SQL Tool),倘若您的客户急需一个定制的报表。您可能想先飞速的的完成报表,等回来以后再重新规划集成到应用菜单中。于是,在您的手提电脑上写一个stored procedure,e-mail给您的系统管理员。您的系统管理员在SQL Tool窗口打开脚本。

用户通过执行这段脚本来创建stored procedure。您再告诉他们应该如何配置参数,然后执行存储过程。结果被输出到result set(结果集)窗口。现在看看如何能把这个结果保存成一个DataWindow。

打开DataWindow页面,然后点击"Create DataWindow"

现在点击"Retrieve DataWindow",刚才的结果集出现在DataWindow中。如果您希望保存这个DataWindow以便以后使用,点击"Save DataWindow"就可以了。您可以适当的修改格式并将它封装为一个报表。

结语
作为PowerBuilder的开发人员, 我们总是被要求完成惊人数量的工作,用户或是项目经理可能会要求极其苛刻。对一个开发人员来说,储备一个“军械库”的可依赖的技术和例子是非常重要的。PowerBuilder的队伍已经不像从前那么壮大了。在与那些大公司以及政府机构的IT经理们的接触过程里,我经常被迫去反驳那些所谓的PowerBuilder早已是“骨灰”(原文用了legacy——遗产) 、“过时货”、“ 废弃的”甚至“60年代的技术”的断言。事实上,PowerBuilder仍旧是目前最棒的RAD开发工具,它可以让开发人员只需大约数小时的功夫就完成设计原型和产品级的代码,而非数天乃至数周。这也显示出开发环境是否以团队为导向的区别。

作为PowerBuilder的开发人员,我们拥有一个优于我们的其他IT同行最强大的工具。我真的希望以上这些技巧能够帮助初学者以及那些中级的开发人员,更加的信赖PowerBuilder。

 
Powerbuilder 9.0实用教程》源代码 1.本源代码包括以下章节源代码: 第01章 认识PowerBuilder 9.0、第05章 创建应用程序、第06章 创建窗体、第07章 创建菜单和工具栏、第10章 应用程序的调试和发布、第11章 典型小型实例赏析、第12章 图书管理系统实例和第13章 学生选课系统实例。 2.源代码使用方法参见《附录A 源代码的使用方法》文件。 __________________________________________________________________ 注意: 1.建议读者下载源文件后,将该源文件进行备份,读者使用副本源文件进行学习,这样一但出问题就不用再从网上下载了。 2.将源文件中“数据库文件”文件夹一定要复制到C盘根目录下,这样才能保证您连接数据库文件成功,具体方法参见《附录A 源代码的使用方法》。 对于书中源代码除了数据库外其他都能正常使用,而示例中数据库需要用户在自己的计算机上注册后才能使用,如果不注册数据源就运行应用程序是检索不到任何数据的,下面以连接学生选课系统数据库为例具体介绍如何连接数据库文件。 第1章 认识PowerBuilder 9.0 1 1.1 PowerBuilder 9.0简介 1 1.1.1 中国软件业现状 1 1.1.2 为什么要学习PowerBuilder 9.0 2 1.1.3 PowerBuilder的概述 2 1.1.4 PowerBuilder的特点 3 1.1.5 PowerBuilder 9.0的新特性 6 1.2 安装PowerBuilder 9.0软硬件需求 9 1.2.1 软件环境需求 9 1.2.2 硬件环境需求 9 1.3 PowerBuilder 9.0功能界面介绍 10 1.3.1 PowerBuilder 9.0界面简介 10 1.3.2 常用功能菜单 10 1.4 工作环境设置 16 1.4.1 工具栏的设置 16 1.4.2 窗口排列 19 1.4.3 快捷键设置 20 1.4.4 系统选项设置 21 1.5 用5分钟制作一个简单实例 22 1.5.1 实例运行界面 22 1.5.2 新建一个工作空间对象 22 1.5.3 新建一个应用程序对象 23 1.5.4 创建窗体 23 1.5.5 为应用程序添加open事件代码 25 1.6 小结 27 1.7 习题 27 第2章 编程基础知识 28 2.1 PowerScript脚本语言书写规则 28 2.1.1 忽略大小写 28 2.1.2 语句的断行、续行和分割 28 2.1.3 注释 29 2.2 数据类型 29 2.3 变量和作用域 30 2.3.1 定义变量 30 2.3.2 引用变量 30 2.3.3 变量的作用域 30 2.4 操作符 31 2.5 标识符 32 2.5.1 标识符的构成 32 2.5.2 匈牙利命名法 32 2.6 常用代词 33 2.7 控制语句 34 2.7.1 判断语句 34 2.7.2 循环语句 36 2.8 结构 38 2.8.1 创建结构 38 2.8.2 使用结构 40 2.9 函数 40 2.9.1 Open()和Close()函数 41 2.9.2 MessageBox()函数 41 2.9.3 类型转换函数 41 2.9.4 类型判断函数 42 2.9.5 其他函数 42 2.10 ODBC数据源与专用数据库接口 43 2.10.1 什么是ODBC数据源 43 2.10.2 专用数据库接口 43 2.10.3 连接数据库 44 2.10.4 配置ODBC 48 2.11 SQL语言 49 2.11.1 SQL语言的格式 49 2.11.2 在PowerBuilder 9中使用SQL语句 51 2.12 类和对象的概念 56 2.12.1 继承 57 2.12.2 重载和多态性 57 2.12.3 封装 57 2.12.4 属性、事件和函数 57 2.13 在PowerBuilder 9.0中实现面向对象编程 58 2.13.1 创建对象 58 2.13.2 设置对象属性 59 2.13.3 编写事件代码 59 2.13.4 实现继承对象 60 2.14 用户对象和用户事件 61 2.14.1 用户对象分类 61 2.14.2 定义用户对象 62 2.14.3 使用用户对象 64 2.14.4 用户事件 66 2.15 小结 67 2.16 习题 68 第3章 创建数据库 69 3.1 数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值