【聚杰网数据库编程】PowerBuilder6.0中数据管道
SQLCA是PowerBuilder中缺少的事务处理对象,使用它可以进行数据库连接,其实它是一个由Transaction创建的一个实例,但有时在应用程序中需要同时连接到不同的数据库,用户则必须使用两个或更多的事务处理对象,例如在此例中,执行Pipe-examples数据管道操作必须连接到PowerSoft Demo DB V6和Pipe两个数据库中,用户可以通过CREATE语句创建两个不同的事务处理对象实例:
desttrans=CREATE Transaction // 连接目标数据库的事务处理对象
sourcetrans=CREATE Transaction // 连接源数据库的事务处理对象
在应用程序中必须通过数据管道对象来执行数据管道操作,同样用户可以使用CREATE语句创建一个数据管道对象:
i-pipeline=CREATE Pipeline // 执行Pipe-examples数据管道操作的数据管道对象 数据管道对象的几个常用的属性和函数现介绍如下:
DataObject属性:设置数据管道对象需要执行的数据管道操作,此例中我们将它设置为"Pipe-examples"。
RowslnError属性:该属性返回在执行数据管道操作时出现错误的记录总数。
RowsRead属性:返回数据管道操作已经从源数据表中读取的记录总数。
RowsWritten属性:返回数据管道操作已经写信目标数据库的记录总数。
Start函数:开始数据管道操作,该函数的使用语汇法如下:
i-pipeline.Start(sourcetrans,desttrans,dw-error)
sourcetrans参数代表连接源数据表的事务处理对象,desttrans参数是连接目标数据表的事务处理对象,dw-error是一个数据窗口控件,用来显示数据管道操作中出现错误的记录。
Cancel函数:体制一个正进行的数据管道操作,该函数无参数,若操作正常停止,函数返回值为1,否则为1。
Repair函数:该函数在数据管道操作出现错误后使用,Repair函数将纠正操作中的错误并对数据库进行修复,使用语法如下:i-pipeline.Repair(desttrans)
声明全局变量
程序中的事务处理对象和数据管道对象在各个事件中都要使用到,所以必须将它们设置为全局变量(Global Variables),在窗口的文本框中输入以下脚本定义 鍪挛翊矶韵笫道褪莨艿蓝韵笫道?
Transaction desttrans,sourcetrans
Pipeline i-pipeline
创建程序窗口w_pipeline
在窗口中加入三个标签,一个数据窗口(dw_error)和四个按纽。其作用分另是三个标签用来显示数据管道执行过程中已读的记录总数、已写的记录总数和出现错误的记录数,“dw_error”数据窗口控件用来显示数据交换中的错误记录,[开始]、[终止]、和[取消]按钮分别用来控制数据管道操作的流程,[退出]按钮则是用来关闭应用程序.
编写程序代码
在Pipe应用程序的Open事件中添加以下代码:
open(w-pipeline) //打开程序窗口
程序中要执行连接数据库操作,所以必须设置两个事务处理对象的属性,具体方法是:切换到窗口绘图器,在程序窗口的Open事件输入以下代码:
i-pipeline=CREATE Pipeline //创建数据管道对象实例
desttrans=CREATE Transaction //创建两个事务处理对象实例
sourcetrans=CREATE Transaction
//设置连接源数据库的事务处理对象实例的属性
sourcetrans.DBMS =ProfileString("regedit.ini","source","dbms"," ")
sourcetrans.Database=ProfileString("regedit.ini","source","database"," ")
sourcetrans.userid= ProfileString ("regedit.ini", "source", "userid", "")
sourcetrans.dbpass= ProfileString ("regedit.ini", "source", "dbpass", "")
sourcetrans.logid = ProfileString ("regedit.ini", "source", "logid", "")
sourcetrans.logpass = ProfileString ("regedit.ini", "source", "logpassword", "")
sourcetrans.servername = ProfileString ("regedit.int", "source", "servername", "")
sourcetrans.DBParm =ProfileString("regedit.ini","source","dbparm"," ")
connect Using sourcetrans;//连接源数据库
If sourcetrans.Sqlcode$#@60;0 then
MessageBox(“错误!”,“无法连接源数据库!”)
End If
//设置连接目标数据库的事务处理对象实例的属性
desttrans.DBMS =ProfileString("regedit.ini","dest","dbms"," ")
desttrans.Database=ProfileString("regedit.ini","dest","database"," ")
desttrans.userid= ProfileString ("regedit.ini", "dest", "userid", "")
desttrans.dbpass= ProfileString ("regedit.ini", "dest", "dbpass", "")
desttrans.logid = ProfileString ("regedit.ini", "dest", "logid", "")
desttrans.logpass = ProfileString ("regedit.ini", "dest", "logpassword", "")
desttrans.servername = ProfileString ("regedit.ini", "dest", "servername", "")
desttrans.DBParm =ProfileString("regedit.ini","dest","dbparm"," ")
connect Using desttrans; //连接目标数据库
If desttrans.sqlcode$#@60;0 then
MessageBox(“错误!”,“无法连接目标数据库!”)
End If
在[开始]按钮进行数据管道操作,在Clicked事件中写入如下代码:
i-pipeline.dataobject="pipe-examples" //设定需要执行的数据管道操作
i-pipeline.start(desttrans,desttrans,w-pipeline.dw-error) //执行操作
st-read.text=string(i-pipeline.rowsread) //显示数据管道操作的结果信息
st-write.text=string(i-pipeline.rowswritten)
st-error.text=string(i-pipeline.rowsinerror)
另外三个按钮单击(Clicked)事件的代码分别如下:
//终止数据管道操作
integer i
i=i-pipeline.cancel()
If i$#@60;0 then
MessageBox(“错误”,“终止数据管道操作错误!”)
End If
//纠正错误
i-pipeline.Repair(desttrans)
//关闭程序窗口
close(w-pipeline)
//断开数据库连接
Disconnect using desttrans;
If sourcetrans.SQLCode$#@60; $#@62;0 Then
MessageBox(“错误!”,“无法断开源数据库链接!”)
End If
//断开目标数据库连接
Disconnect using desttrans;
If desttrans.SQLCode$#@60; $#@62;0 Then
MessageBox(“错误!”,“无法




