博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

函数SetTransObject详解

Posted on 2010-01-26 08:54  大椰网吧  阅读(1091)  评论(1编辑  收藏  举报

函数作用:为数据窗口或者DataStore指定一个事务对象。必须通过事务对象,PowerBuilder才能够和数据库进行通信,才能够进行数据处理。这里的事务对象是基于程序的事务对象,可以对数据库事务进行更多的控制。在程序中,通过SQL语句中的Connect、 Rollback、CommIT等进行事务的控制。使用该事务对象,可以为PB应用程序建立一个和数据库的永久性联结,在数据窗口或者DataStore每次进行Retrieve或者Update前不必再临时建立联结,而建立联结是比较费资源的一种操作,所以使用该函数可以提供更好的程序执行性能。在调用该函数之前,应该设置事务对象的各个参数。缺省的事务对象SQLCA,是一个Transaction类型的全局变量,可以在PB应用程序中直接使用。也可以定义我们自己的事务对象。和该函数类型的还有SetTrans,两者的区别是:SetTransObject不能对事务进行自动控制,都是由程序来控制的;使用函数SetTrans时程序不能控制事务对象,这时的事务都是自动控制的。使用事务对象按照如下步骤进行:
1)设置事务对象的参数,根据DBMS的不同而不同,可以在DB Profile对话框的Preview中找到语法。这些教本通常在Application的Open事件中编写;
2)使用SQL语句Connect联结
数据库。通常也是在Application的Open事件中编写该教本。需要注意的是,一定要检查是否联结成功。可以通过SQLCA.SQLCode来判断,如果SQLCA.SQLCode等于1则表示联结成功。如果联结不成功,则不应该继续允许。
3)调用SetTransObject函数,为数据窗口对象设置事务对象。通常在窗口的Open事件或者数据窗口的Constructor事件中编写。
4)在调用函数Update之后,检查返回值是否为1,如果是1则使用事务语句Comm
IT提交数据,否则调用Rollback回退事务。
函数语法:integer dwcontrol.SetTransObject ( transaction transaction )
ldwcontrol:要设置事务对象的DataWindow、下拉子数据窗口或者DataStore的名称。
ltransaction:事务对象名称,是Transaction类型的变量。
返 回 值:integer类型,1表示成功,如果发生错误则返回-1,如果任意参数为Null则返回Null。
代码实例:
       例1:以下脚本在窗口的Open事件中编写:
dw_1.SetTransObject(
SQLCA)
例子2:以下脚本在数据窗口的Constructor事件中编写:
This.SetTransObject(
SQLCA)
例子3:以下教本在Application对象的Open事件中编写:
// Profile Mpxt

SQLCA.DBMS = ProfileString('setup.ini','databASE','DBMS','')
SQLCA.AutoCommIT = False
SQLCA.DBParm = ProfileString('setup.ini','databASE','DBParm','')

connect;
if sqlca.SQLcode = 0 then
Open(w_main)
else
MessageBox('错误','不能和数据库建立连接。按任意键关闭系统......',StopSign!)
halt close;
end if