9.2 数据窗口与数据库
9.2.1 事务对象
我们知道事务对象在POWER BUILDER 当中占有非常重要的地位,POWER BUILDER的应用程序必须通过事务对象来实现与各种数据库的连接,所以在讨论数据窗口和数据库的关系之前,我们首先来介绍有关事物对象的基本内容。
在POWER BUILDER当中,要想对一个数据库进行操作,首先必须建立与这个数据库的连接。在一个POWER BUILDER数据库连接中,事务对象是一个特殊的不可视的对象,其功能就是为POWER BUILDER程序与数据库之间的通信提供一个通信区。事务对象当中定义了POWER BUILDER用来与数据库进行连接的参数。在访问数据库之前,必须先建立一个事务对象,然后给这个事务对象的属性赋以合适的值,才能通过这个事务对象与数据库连接,完成所需的数据库操作。当一个应用程序开始运行时,POWER BUILDER 会自动创建一个名为SQLCA的默认全局事务对象。SQLCA是“SQL COMMUNICATIONS AREA”SQL通信区的缩写。可以在应用程序中使用这个默认的事务对象,也可以定义自己的事务对象。
POWER BUILDER提供了四条用来进行事务管理的语句
CONNECT: 成功的CONNECT语句标志着一个事务的开始。在执行CONNECT语句之前,必须对一个已经存在的事物对象的用以连接DBMS的属性赋以合适的值。
DISCONNECT: 这个语句标志着中止一个事务。
COMMIT: 执行COMMIT将提交自该事务开始之后当前事务对数据库已做的所有尚未提交的更新操作。并开始一个新的事务。
ROLLBACK: 执行ROLLBACK语句之后,当前事务已做的所有更新操作都将被撤消,并开始一个新的事务。
9.2.2 使用事务对象
有两种方法可以为一个数据窗口设置事务对象。
使用SETTRANS函数:SETTRANS函数将一个特定的事务对象拷贝到数据窗口控件的内部事务对象当中。在程序使用该函数的时候,数据窗口控件使用自己内部的事物对象并且根据需要自动执行连接与断开连接的操作,如果出现错误,则自动撤消已做的所有更新操作,恢复到事务开始时的状态。
当数据窗口要访问数据库的时候,如果执行一个RETRIEVE命令或者UPDATE命令,数据窗口就会发出一个内部CONNECT命令,处理相应的数据访问。数据处理结束后,还会发出一个内部的DISCONNECT命令,断开与数据库的连接。所以如果在程序中使用SETTRANS函数,不需要另外书写CONNECT和DISCONNECT命令。
从上面的内容当中,我们可以看出SETTRANS语句的缺陷,那就是,在每次进行数据库访问的时候,都要与数据库建立新的连接,而这种连接会占用相当部分的系统资源。而且在进行数据库访问的时候,用户不能对这个访问过程进行控制。如果使用SETTRANS语句,当数据库连接的数目增大的时候,程序的效率就要受到影响了。
使用SETTRANSOBJECT命令:使用这条命令可以为一个数据窗口指定一个事务对象。我们应该按照下面的顺序编写脚本来进行数据库的访问。
CONNECT
SETTRANSOBJECT
RETRIEVE或UPDATE
COMMIT或ROLLBACK
DISCONNECT
这里我们看到了两条新的指令:RETRIEVE和UPDATE
RETRIEVE指令的功能是在使用SETTRANSOBJECT语句把一个数据窗口和一个事务处理对象连接起来之后,把数据库中的内容检索到数据窗口当中去。它的调用格式是DATAWINDOW.RETRIEVE()
如果要访问的数据源是使用SQLSELECT语句产生的,那么在调用RETRIEVE函数的时候必须给出参数值,调用格式如下:DATAWINDOW.RETRIEVE(ARG1,ARG2,RETRIEVE函数中的参数次序要与数据窗口对象中定义的SQL SELECT参数的次序保持一致。POWER BUILDER允许RETRIEVE函数带有多于数据窗口对象在SQL SELECT中定义的原有参数数目的参数,多余的参数将被忽略。利用这个特点,可以设计出能够操作不同数据窗口对象的通用检索。
UPDATE指令的功能是在对数据窗口中的数据进行修改之后,需要使用UPDATE函数将所做的修改写回到数据库中去。