1、PowerBuilder事务对象(Transaction Objects)是PowerBuilder中自动与数据库交互的控制者,它是PowerBuilder众多对象中最重要的一个对象。是PowerBuilder程序与数据库之间信息的一个结构变量。这个对象是PowerBuilder应用与数据库的通讯区域。PowerBuilder在应用开始时建立一个全局的事务对象SQLCA。由于大多数的应用只用到一个数据库,所以一般开发者主要也只用SQLCA作为与唯一数据库连接的事务对象。 PowerBuilder则通过事务对象传递连接信息给数据库,也可以从数据库取得信息,PB以指定事务对象进行的连接为事务管理单
2、位。缺省事务对象为SQLCA,SQLCA全局有效,在任何脚本里都可使用,SQLCA 中包含连接数据库所需信息。可以根据需要使用自定义事务对象,事务对象的使用也同其它对象一样需要定义事务对象变量,然后创建(分配空间),但全局SQLCA 无需定义和创建,SQLCA是应用运行时自动.使用步骤如下:,事务对象,1、transaction OraleTrobject/定义事务对象变量 2. OraleTrobject=CREATE transaction/建立事务对象实例3、指定连接信息 OraleTrobject.DBMS=ORACIE OraleTrobject.Database=DatabaseN
3、ame OraleTrobject.UserID=UserID OraleTrobject.DBpass=DBpass OraleTrobject.serverName=serverName OraleTrobject.LogID=LogID OraleTrobject.Logpass=Logpass 如果使用SQLCA连接无需1、2步,但仍需使用本步对连接参数设置。,4、connect using OracleTrobject;/连接数据库 或 connect;/使用SQLCA连接5、建立事务对象与对应数据窗口连接 dw_oracle.SetTransobject(OracleTrobjec
4、t) 6、取数据、更新数据 7、提交或回滚事务 COMMIT using OracleTrobject) Rollback Using Oracltiobject) 8、断开连接、释放事务对象变量 Disconnect using OracleTrobject,事务对象是数据窗口控件与数据连接的纽带,对使用缺省的事务对象SQLCA连接数据库,则无需使用Using子句。 数据窗口控件可以拥有自己的内部事务对象,通过dw_Oracle.Settrans(OracleTrobject)来设置数据窗口控件dw_Oracle的内部事务对象,实际上是把事务对象OracleTrobject 的内容拷贝到数据
5、窗口控件dw_Oracle的内部事务对象中,然后通过此数据窗口控件对数据库操作,与事务对象OracleTrobject无关,即使之后对事务对象OracleTrobject内容作了改变,也不会影响数据窗口控件dw_Oracle 的内部事务对象内容。 多个数据窗口控件,可以共享某个事务对象。事务控制以事务对象为单位,事务的提交和回滚都是对应某个事务对象而言。连接数据库时只需在使用前进行一次连接即可,不必对数据窗口控件分别连接。,可以通过建立多个事务对象同时与多个数据库建立连接,也可以多个事务对象根据不同的注册要求,设置不同的注册参数,连接至同一个数据库。 SQLCA共有15个成员。 序号 名称 类
6、型 说明 1 DBMS string 所使用的数据库管理系统的名字,如Sybase,Oracle,ODBC。 2 Database string 要连接的数据库名字。 3 UserID string 连接数据库所用的用户名。有的DBMS不需要此项。 4 DBPass string 用户连接数据库的口令。 5 Lock string 这是数据库的保护级别,一般不必给出。,6 LogID string 登录到数据库服务器上的用户名,有的DBMS不需要此项,但Sybase和Oracle需要指定这个参数。 7 LogPass string 登录到数据库服务器上的用户口令。这个属性可设可不设,但Syba
7、se和Oracle需要指定口令。 8 ServerName string 数据库服务器名。 9 AutoCommit boolean 指定是否将数据库设置成自动提交所有事务。默认是False,也就是说,必须在应用程序中进行事务管理,并在适当的时候对数据库提交事务。如果选择True,则每个事务都由系统自动提交。 10 DBParm string 用于向数据库传递特殊信息的属性。 11 SQLCode long 指示最近一次SQL操作失败或成功。返回结果值为: 0 无错误。-1 出现一个错误。 100 没有检索到数据。,12 SQLNRows long 最近一次SQL操作影响的行数,数据库不同其含
8、义也不同。 13 SQLDBCode long 数据库错误代码。不同的数据库的含义不同。 14 SQLErrText string 相应于SQLDBCode属性中错误码的文字说明。 15 SQLReturnData string 返回DBMS执行SQL的附加信息,不同的DBMS其值不同。 例子:这是一个连接Sybase数据库所需的代码实例: sqlca.dbms=Sybase sqlca.database=DatabaseName sqlca.logid=LoginId sqlca.logpass=PassWord sqlca.servername=ServerName sqlca.autoc
9、ommit=false,PowerBuilder中的事务管理PowerScript中常用的事务管理的语句有四个:COMMIT, ROLLBACK, CONNECT, DISCONNECT。 当您需要应用与数据库建立连接时使用CONNECT这一操作命令,取消连接时执行DISCONNECT,这两个命令一般分别用在应用的开始和结束,也就是Application的Open和Close事件中。 当一个事务的数据库修改都成功地完成后,修改须提交给数据库,COMMIT语句是一个旧事务结束和一个新事务开始的界线。在修改被提交前,数据库的数据并没有被真正地修改,这些修改被保留在某个工作区,只有作修改的用户才能看
10、到这些被修改后的值,提交之后,则所有的用户就都可以看到新值了。,在事务的进程中发生某些错误,或者在操作中出于种种原因打算中止事务,须用ROLLBACK命令回退事务,如果已作的操作不用ROLLBACK命令取消,这些操作必将错误地作为下一个事务的一部分而导致数据库的混乱。 如果您使用的是多窗口的应用,却只用一个事务对象,就应格外注意ROLLBACK和COMMIT会影响事务的逻辑一致性。在某个窗口执行的这两个指令会使其他窗口应用中所进行到一半的工作提交或回退。 在多用户系统中,修改和提交的时间越接近,提交成功的可能性就越高。因为一个事务中所有的SQL语句全部执行成功而提交却失败是完全可能发生的,例如在您的事务过程中,另一个用户修改了数据并提交,这很可能使您作出的修改无效,这时COMMIT将失败,您必须回退这一事务的全部。,事务对象的AutoCommit属性 事务对象有一个AutoCommit的属性可以使开发者简化对事务管理的操作,这一布尔型的属性可以用TRUE或FALSE来对其赋值。当其为真时,PowerBuilder不通过其他额外的交互就将您的SQL语句传输给后台数据库,而且执行完毕自动提交。,