powerbuilder游标的使?

2023-12-17 08:34:13

在某些PowerBuilder应?程序的开发中,您可能根本?不到游标这样?个对象。因为在其它?具开发中很多需?游标实现的?作,在PowerBuilder中却已有DataWin-dow来代劳了。事实上,DataWindow不仅可以替代游标进?从后台数据库查询多条记录的复杂操作,?且还远不?这些。但是同DataWindow和DataStore相?,游标也有其??的优点,?如系统资源占?少,操作灵活,可根据需要定义变量类型如全局、实例或局部类型和访问类型如私有或公共等。

游标(Cursor)是一种用于处理数据库查询结果的机制。游标提供了一种方式来逐行处理查询结果,并对每一行数据进行操作。以下是一个使用游标的简单例子

如要声明?个叫作Cus-tomerCursor的游标?以查询地址在北京的客户的姓名、帐号及其余额,您可以编写如下代码:
DECLARE CustomerCursor CURSOR FOR
SELECT acct_no,name,balance
FROM customer
WHERE province="北京";
在游标的声明中有?点值得注意的是,如同其它变量的声明?样,声明游标的这?段代码?是不执?的,您不能将debug时的断点设在这?代码?上,也不能?IF...END IF语句来声明两个同名的游标,如下列的代码就是错误的。
IF Is_prov="北京"THEN
DECLARE CustomerCursor CURSOR FOR
SELECT acct_no,name,balance
FROM customer
WHERE province="北京";
ELSE
DECLARE CustomerCursor CURSOR FOR
SELECT acct_no,name,balance
FROM customer
WHERE province〈〉"北京";
END IF
打开游标
声明了游标后在作其它操作之前,必须打开它。打开游标是执?与其相关的?段SQL语句,例如打开上例声明的?个游标,我们只需键?:
OPEN CustomerCursor;
由于打开游标是对数据库进??些SQL SELECT的操作,它将耗费?段时间,主要取决于您使?的系统性能和这条语句的复杂程度。如果执?的时间较长,可以考虑将屏幕上显?的?标改为hourglass。
提取数据
当?OPEN语句打开了游标并在数据库中执?了查询后,您不能?即利?在查询结果集中的数据。您必须?FETCH语句来取得数据。?条FETCH语句?次可以将?条记录放?程序员指定的变量中。事实上,FETCH语句是游标使?的核?。在DataWindow和DataStore中,执?了Retrieve()函数以后,查询的所有结果全部可以得到;?使?游标,我们只能逐条记录地得到查询结果。
已经声明并打开?个游标后,我们就可以将数据放?任意的变量中。在FETCH语句中您可以指定游标的名称和?标变量的名称。如下例:
FETCH CustmerCur-sor
INTO:ls_acct_no,
:ls_name,
:ll_balance;
从语法上讲,上?所述的就是?条合法的取数据的语句,但是?般我们使?游标却还应当包括其它的部分。正如我们前?所谈到的,游标只能?次从后台数据库中取?条记录,?在多数情况下,我们所想要作的是在数据库中从第?条记录开始提取,?直到结束。所以我们?般要将游标提取数据的语句放在?个循环体内,直?将结果集中的全部数据提取后,跳出循环圈。通过检测SQLCA.SQL-CODE的值,可以得知最后?条FETCH语句是否成功。?般,当SQLCODE值为0时表明?切正常,100表?已经取到了结果集的末尾,?其它值均表明操作出了问题,这样我们可以编写以下的代码:
lb_continue=True
ll_total=0
DO WHILE lb_continue
FETCH CustomerCur-sor
INTO:ls_acct_no,
:ls_name,
:ll_balance;
If sqlca.sqlcode=0 Then
ll_total+=ll_balance
Else
lb_continue=False
End If
LOOP
循环体的结构有多种,这?提到的是最常见的?种。也有的程序员喜爱将?条FETCH语句放在循环体的前?,循环体内再放置另外?条FETCH语句,并检测SQLCA.SQLCODE是否为100。但是这样做,维护时需同时修改两条FETCH语句,稍?烦了些。
关闭游标
在游标操作的最后请不要忘记关闭游标,这是?个好的编程习惯,以使系统释放游标占?的资源。关闭游标的语句很简单:
CLOSE CustomerCursor;
使?Where?句?
我们可以动态地定义游标中的Where?句的参数,例如在本例中我们是直接定义了查询省份是北京的记录,但也许在应?中我们要使??个下拉式列表框,由?户来选择要查询的省份,我们该怎样做呢?
我们在前?曾经提到过,DECLARE语句的作?只是定义?个游标,在OPEN语句中这个游标才会真正地被执?。了解了这些,我们就可以很?便地实现这样的功能,在DECLARE的Where?句中加?变量作参数,如下所?:
DECLARE CustomerCursor CURSOR FOR
SELCECT acct_no,name,balance
FROM customer
WHERE province=:ls_province;
∥定义ls_province的值
OPEN CustomerCursor;
游标的类型
同其它变量?样,我们也可以定义游标的访问类型:全局、共享、实例或局部,游标变量的命名规范建议也同其它变量?样。

但是在目前强大的数据库性能面前这种用法已经很少。
?

文章来源:https://blog.csdn.net/zz_ll9023/article/details/135039151
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。