本例主要描述了数据管道的用法,我们首先看看数据管道的一些基础知识:
数据管道主要可以完成以下几个功能:
数据库之间数据的传送
修改表的结构,象主键标,是否可为NULL等
我们在Pipeline画板中创建一个管道对象时,必须说明以下这些参数:
Source Connection | 源数据库 |
Destination Connection | 目的数据库 |
Data Source | 源表 |
Table | 目的表 |
Option | 管道操作 |
其中管道操作方式有:
Create: 添加表(表不能存在〕
Replace: 删除再添加表(表可以存在
Refresh: 删除再插入行
Append: 插入行
Update: 更新/插入行
管道对象属性:
RowsInError Long 管道中发现的错误的行数
RowsRead Long 管道已读取行数
RowsWritten Long 写入数据库的行数
DataObject String 管道对象名
Syntax String 建立管道对象的语法字符串
管道对象函数:
Cancel Integer 中止管道执行
ClassName String 返回用户对象的名称
GetParent PowerObject 返回父对象的名称
PostEvent Boolean 在用户对象的消息队列末增加一个事件
Repair Integer 修正目的数据库
Start Integer 执行管道
TriggerEvent Integer 送一个事件到用户对象并执行事件脚本
TypeOf Object 返回用户对象的类型
要在程序中使用管道,必须要在Pipeline画板中创建一个管道对象,一个管道类型的
标准用户类对象和包含DataWindow控件的窗口。 PowerBuilder检测到任何管道错误后
将使用标准的dataWindow显示这个错误, datewindow 每个无效行显示全部的列,并显
示一条错误消息。在本例中,创建了3个管道对象:
p_emp_master_create,
p_emp_transaction_create,
p_emp_master_transaction_update.
p_emp_create为employee表建一个拷贝,作为本例的Master Table,
p_emp_transaction_create建立本例的Transaction Table,
p_emp_master_transaction_update根据所选部门和Transaction Table的内容修改Master Table相应记录,它的语法为:
SELECT "emp_pipe_transaction"."emp_id",
"emp_pipe_transaction"."emp_fname",
"emp_pipe_transaction"."emp_lname",
"emp_pipe_transaction"."dept_id",
"emp_pipe_transaction"."bene_health_ins",
"emp_pipe_transaction"."bene_life_ins",
"emp_pipe_transaction"."bene_day_care"
FROM "emp_pipe_transaction"
WHERE ( emp_pipe_transaction.dept_id = :department_id )
其中::department_id即为在数据窗口dw_dept中所选部门的id号。
管道类型的用户对象有2个:p_pipe_wmeter和p_pipe_wometer,它们都是从pipeline继承来
的,都包含有3个静态文本类型的实例变量:st_read,st_written,st_errors。 p_pipe_wmeter
在它的pipemeter事件中对它们赋值,在窗口的Open事件中把它们与窗口上的3个静态
文本控件联系起来,动态显示当前数据管道的进度。
总结:
要实现数据管道要完成以下几步:
1. 创建Pipeline类型的标准不可视用户对象p_pipe_meter
2. 在Pipeline中创建一数据管道(作为第5步的DataObject)
3. 创建一窗口(带一数据窗口控件PipeError和命令按钮〕
4. 在OPEN事件中创建一p_pipe_meter类型的iu_PipeLine实例变量
5. 设置iu_PipeLine的DataObject特性
6. 连接源数据库和目的数据库
7. 启动数据管道(按钮Clicked事件〕
8. 动态修改进度(数据管道的PipeMeter事件)
9. Cancel事件
10.管道修复
11.提示完成(PipeEnd事件〕
12.断开数据库,Destory用户对象。