原文:http://bbs.51cto.com/viewthread.php?tid=409234
PowerBuilder是快速有效的开发工具,在程序实现过程灵活
多样,下面介绍一下在开发高校产品过程中积累的一些经验。
一、处理 SQL 语句
1、缓冲 SQL 语句
在应用程序中,有时需要反复调用同一组 SQL语句,
在这种情况下,可以通过在应用中为这些 SQL 建立缓冲区来
提高执行性能。
在缺省情况下,SQL 语句的缓冲区是关闭的,你可以
通过如下语句打开它:
SQLCACHE = n
n 表示装入缓冲区的 SQL 语句数量(缺省为0)。
例如:
dw_1.SetTransObject(sqlca)
SQLCA.dbParm = "SQLCache = 0"
dw_1.retrieve()
如果将上例的 "SQLCache = 0" 改为 "SQLCache = 25",
此句的执行效率将提高五分之一左右。但应注意缓冲区的大小,
否则也将影响程序执行的性能。
注:此方法对用 ODBC 和 ORACLE 连接的数据库非常有效。
2、捆绑变量
请看下例:
SQLCA.DBPARM = "DISABLEBIND=1"
INSERT INTO DA_DH VALUES("1","河南0")
INSERT INTO DA_DH VALUES("2","河南1")
INSERT INTO DA_DH VALUES("3","河南2")
INSERT INTO DA_DH VALUES("4","河南3")
INSERT INTO DA_DH VALUES("5","河南4")
INSERT INTO DA_DH VALUES("6","河南5")
这里未使用捆绑变量,在插入是 PB 将重新处理每个带有
新值的SQL语句。如果将上例改为:
SQLCA.DBPARM = "DISABLEBIND=0"
INSERT INTO DA_DH VALUES("1","河南0")
INSERT INTO DA_DH VALUES("2","河南1")
INSERT INTO DA_DH VALUES("3","河南2")
INSERT INTO DA_DH VALUES("4","河南3")
INSERT INTO DA_DH VALUES("5","河南4")
INSERT INTO DA_DH VALUES("6","河南5")
则系统将把 INSERT 语句按如下格式进行处理:
INSERT INTO DA_DH VALUES(?,?)
其中 "?" 称为占位符。系统性能将有所增强。
3、用数据窗口代替 SQL 语句
通常,为了获得某些数据,采用数据窗口和 SQL 语句都是可行的,
但是PB 对数据窗口和 SQL 语句采用不同的处理机制,因此,
具有不同的效率。
例:为里检索电话档案中的用户名,可以利用 SQL 语句,
将所有的数据检索到一个多行编辑中,也可以检索到一个数据窗口中。
如果使用第一中方法:
首先定义一个游标:
DECLARE CUR CURSOR FOR
SELECT "DA_DH"."HM"
FROM "DA_DH";
然后可以:
STRING stxt[],st
int li
open cur
do li = li + 1
fetch cur
into :stxt[li] ;
st=st+stxt[li] + "~r~n"
loop while stxt[li]""
close cur;
mle_1.txt = st
也可以使用第二种方法:
dw_1.settransobject(sqlca)
dw_1.retrieve()
利用 POWERBUILDER PROFILER 工具进行检查,对比两种
方法所需时间如下
方法 所需时间 (百分之一秒)
SQL 语句 100.9857
数据窗口 49.0133
由于数据窗口或 DATASTORE 使用了标准的内嵌的代码,
而不是有开发人员进行全部编码,同时编译执行的速度比解释
执行的速度快的多,因此在开发过程中应尽量使用数据窗口和
DATASTORE.. 即使是必须用 SQL 语句的时候,也应该尽量
将它们定义为存储过程(特别是在多用户的环境中),以提高
应用程序的性能.
二、数据窗口的编程和执行
数据窗口是PB最值得被称道的, 其具有如下特点:
1. 多种显示方式.
2. 多种编辑方式.
3. 使用方法简单.
4. 具有多种报表形式.
5. 可实现屏幕滚动.
6. 可实现数据的有效性校验.
7. 执行性能显著提高.
8. 编程工作变少.
9. 可以在数据窗口内部实现数据库的更新.
下面, 我将介绍一些用于提高数据窗口性能的技术.