PowerBuilder10.0数据库应用开发教程第10章数据管道重点内容:•数据管道概述•创建数据管道•使用数据管道•数据管道示例PowerBuilder10.0数据库应用开发教程一、数据管道概述:数据管道提供了在同一数据库内或不同数据库之间,甚至是不同的数据库管理系统之间快速复制数据的途径目的数据库中的表源数据库中的表数据管道PowerBuilder10.0数据库应用开发教程二、创建数据管道:1.步骤PowerBuilder10.0数据库应用开发教程二、创建数据管道:2.数据管道工具栏及保存对话框数据管道工具栏单击工具栏按钮,对数据管道对象进行保存,打开savedatapipeline对话框PowerBuilder10.0数据库应用开发教程三、创建数据管道:3.打开数据管道选择File|open命令,打开open对话框修改数据管道PowerBuilder10.0数据库应用开发教程四、使用数据管道:1.数据管道对象属性RowsInError:管道中发现的错误的行数RowsRead:管道已读取行数。RowsWritten:写入数据库的行数。DataObject:管道对象名。Syntax:建立管道对象的语法字符串。PowerBuilder10.0数据库应用开发教程四、使用数据管道:2.数据管道对象函数Cancelr:中止管道执行;ClassName:返回用户对象的名称;GetParent:返回父对象的名称;PostEvent:在用户对象的消息队列末增加一个事件;Repair:修正目的数据库;Start:执行数据管道;Triggerevent:送一个事件到用户对象并执行事件脚本;TypeOf:返回用户对象的类型。PowerBuilder10.0数据库应用开发教程四、使用数据管道:3.数据管道对象事件Constructor:在用户对象建立时触发。Destructor:在用户对象被清除时发生。PipeEnd:在调用strat()或Repair()函数结束时发生。PipeMeter:在以块为单位的纪录被读写后触发。PipeStart:在调用start()或Repair()函数开始时发生。PowerBuilder10.0数据库应用开发教程四、使用数据管道:4.数据管道实现步骤(1)创建PipeLine类型的标准不可视用户对象(2)在PipeLine中创建一数据管道(3)创建一窗口(带一数据窗口控件和命令按钮)(4)在open事件中创建第(1)步创建的不可视用户对象的实例变量(5)设置第(4)创建的实例变量的特性;(6)连接源数据库和目的数据库;(7)启动数据管道(8)动态修改进度(数据管道的PipeMeter)事件;(9)Cancel事件(10)管道修复(11)提示完成(pipeEnd事件)(12)断开数据库,销毁用户对象。PowerBuilder10.0数据库应用开发教程四、使用数据管道:5.创建数据管道用户对象PowerBuilder10.0数据库应用开发教程五、数据管道示例:数据库House_ASA中的表house_info及其数据灌入到powerBuilder10.0的演示数据库EASDemoDBV10,步骤:(1)以10.2.1的步骤,创建一个House_ASA数据库的customers为源表创建一个数据管道对象,并以p_customers为对象名保存。(2)以表customers为基表创建数据窗口对象d_customers,显示风格为Grid,如图所示。PowerBuilder10.0数据库应用开发教程五、数据管道示例:(3)创建一个继承于数据管道的不可视的标准用户对象,命名为uo_p_customer,uo_p_customer(用户对象)和p_customers(数据管道对象)的关系类似于数据窗口控件和数据窗口对象的关系,前者提供编程用的属性、事件和函数,后者用于操作数据库中的数据。(4)在uo_p_customer中定义如下实例变量://用于显示数据管道的读、写和出错行数的静态文本statictextist_read,ist_write,ist_error(5)在用户对象uo_p_customer的PipeMeter事件中编写如下脚本://设置静态文本的值ist_read.text=string(RowsRead)ist_write.text=string(RowsWritten)ist_error.text=string(RowsInError)(6)PipeMeter事件在数据管道每处理完一块数据后触发一次,数据块的大小由数据管理对commit选项决定。假设P_customers的commit选项为10,那么PipeMeter事件在数据管道每次处理完10条数据后发生一次。PowerBuilder10.0数据库应用开发教程五、数据管道示例:(7)新建一个窗口对象w_pipeline_demo,用于和用户交互,完成数据管道的启动、停止和修复操作。设计界面如图里面包含三个数据窗口dw_source(源表)、dw_error(错误信息)、dw_destination(目的表);三个静态文本st_read(已读行数)、st_write(已写行数)、st_error(出错行数);五个命令按钮cb_start(启动)、cb_stop(停止)、cb_repair(修复)、cb_reset(放弃)、cb_exit(退出)。PowerBuilder10.0数据库应用开发教程五、数据管道示例:(8)窗口定义如下实例变量transactiontra_sourcetransactiontra_destinationuo_p_customeruo_cutomer(9)为窗口open事件中建立数据库连接,代码为://ProfileHouse连接源数据库tra_source.DBMS=ODBCtra_source.AutoCommit=Falsetra_source.DBParm=ConnectString='DSN=House数据源;UID=dba;PWD=sql'connectusingtra_source;iftra_source.sqlcode0thenmessagebox(提示,连接源数据库失败!)returnendif//连接目标数据库//ProfileEASDemoDBV10tra_destination.DBMS=ODBCtra_destination.AutoCommit=Falsetra_destination.DBParm=ConnectString='DSN=EASDemoDBV10;UID=dba;PWD=sql'connectusingtra_destination;iftra_destination.sqlcode0thenmessagebox(提示,连接目的数据库失败!)returnendifPowerBuilder10.0数据库应用开发教程五、数据管道示例:(10)在窗口的关闭事件中编写如下代码://关闭与数据库的连接disconnectusingtra_source;disconnectusingtra_destination;//撤销事务对象destroytra_sourcedestroytra_destination//撤销数据管道对象destroyuo_cutomer(11)在数据窗口dw_source的retrieveend事件中编写如下代码://检索数据窗口dw_destinationdw_destination.retrieve()PowerBuilder10.0数据库应用开发教程五、数据管道示例:(12)启动按钮的clicked事件编写如下代码:integerli_templi_temp=uo_cutomer.start(tra_source,tra_destination,dw_error)ifli_temp1thenmessagebox(错误提示,数据管道在运行中发生错误)endif(13)停止按钮的clicked事件编写如下代码:uo_cutomer.cancel()(14)修复按钮的clicked事件编写如下代码:integerli_templi_temp=uo_cutomer.repair(tra_destination)ifli_temp1thenmessagebox(错误提示,数据管道在修复中发生错误)endifPowerBuilder10.0数据库应用开发教程五、数据管道示例:(15)放弃按钮的clicked事件编写如下代码:dw_error.reset()(16)退出按钮的clicked事件编写如下代码:close(parent)(17)在应用程序对象中编写代码Open(w_pipeline_demo)