PB数据管道的实用程序设计技术.docx

上传人:b****7 文档编号:10802670 上传时间:2023-02-23 格式:DOCX 页数:14 大小:20.65KB
下载 相关 举报
PB数据管道的实用程序设计技术.docx_第1页
第1页 / 共14页
PB数据管道的实用程序设计技术.docx_第2页
第2页 / 共14页
PB数据管道的实用程序设计技术.docx_第3页
第3页 / 共14页
PB数据管道的实用程序设计技术.docx_第4页
第4页 / 共14页
PB数据管道的实用程序设计技术.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

PB数据管道的实用程序设计技术.docx

《PB数据管道的实用程序设计技术.docx》由会员分享,可在线阅读,更多相关《PB数据管道的实用程序设计技术.docx(14页珍藏版)》请在冰豆网上搜索。

PB数据管道的实用程序设计技术.docx

PB数据管道的实用程序设计技术

PB数据管道的实用程序设计技术

Powerbuilder(以下简称pb)提供强大数据管道技术(DataPipeline)。

通过数据管道,我们可以在不同数据库表之间移动数据,实现一个或多个表中的数据拷贝到一个新的或已经存在的目标数据表中。

这种操作可以在同一数据库中进行,也可以在不同数据库,甚至可以在不同的DBMS之间进行。

我们通常使用数据管道的两种方式:

1、直接使用pb画板中提供的实用工具;

2、在应用程序中实现数据移动。

  本文着重结合具体实例讲述在应用程序中如何实现数据管道技术。

在应用程序中使用数据管道有以下五个基本步骤:

1、创建应用程序所需对象;

2、执行数据管道初始化操作;

3、启动数据管道;

4、处理程序运行中移动数据的错误行;

5、执行数据移动完毕后的收尾操作。

一、创建应用程序所需对象

  为了在应用程序中实现数据管道,需建立以下几个不同的对象:

数据管道对象;支撑用户对象;窗口对象。

  创建数据管道对象。

这是为实现管道功能所必须的,可在Powerbuilder提供的pipeline画板中创建并定义它的特征。

示例在pipeline画板中创建应用程序需要的数据管道对象pipe_user_table01.在此着重说明Commit和MaxErrors文本框中参数的意义。

1、Commit中选中ALL,为当所有行在管道操作完成后再向数据库提交,如果操作过程中被终止,则撤消对表的所有操作。

用户可以根据实际情况加以选择自己块操作的大小。

2、MaxErrors文本框中选中NOLIMIT,为不论有多少行出错都不终止管道操作。

此处视实际编程需要可选其它数字。

  创建支撑用户对象。

为了提供对属性、事件及函数的支持,需创建一个继承PB管道系统对象(pipelinesystemobject)的用户对象,通过这个用户对象来管理管道操作。

管道系统对象包括了不同的属性、事件及函数,在程序运行时可以用来管理一个管道对象。

下表为这些属性、事件及函数。

属性

DataObject,RowsRead,RowsWriten,RowsInError,Syntax

事件

PipeStart,PipeMeter,PipeEnd

函数

Start,Repair,Cancel

创建过程如下:

(1)打开用户对象画板,单击New按钮,在NewUserObject对话框中选择Class组框中的Standard作为用户对象类型。

(2)在SelectStandardClassType对话框中选取继承pipeline内置系统对象。

(3)声明管道监控实例。

为使用户及时了解程序的运行情况,在创建支撑用户对象画板的工作区使用菜单项DeclareInstanceVariables中声明三个静态文本的监控实例:

ist_status_read,ist_status_written,ist_status_error。

编辑支撑对象的PipeMeter事件脚本,语句为:

ist_status_read.text=String(RowsRead)

ist_status_written.text=String(RowsWritten)

ist_status_error.text=String(RowsInError)

(4)保存用户对象。

示例创建支撑用户对象命名为u_pipe_exchange。

  示例创建窗口对象w_yz_pipeline。

为了完成与管道对象进行交互和监控,该窗口应完成以下基本操作:

启动管道;发生错误,显示并修复错误;终止管道操作。

在创建此对象时,必须包括一个数据窗口控件,此控件为数据管道提供错误行显示。

并且,由应用程序提供此控件的数据窗口对象,不必由用户指定。

下表为窗口w_yz_pipeline中窗口控件说明:

控件类型

控件名

控件说明

单选按钮

Rb_create

创建新表

Rb_insert

插入到已有表

命令按钮

Cb_start

管道操作开始

Cb_stop

管道操作停止

Cb_close

关闭窗口

Cb_fixes

修复错误行

Cb_cancel

不修复错误行

数据窗口

Dw_written

写入数据信息数据窗口

Dw_errors

错误信息显示数据窗口

静态文本

St_status_connect

数据库连接提示

St_status_read

已读行提示

St_status_written

写入行提示

St_status_error

错误行提示

二、执行数据管道初始化操作

执行初始化操作步骤:

(1)连接管道操作的源数据库和目标数据库。

首先在窗口w_yz_pipeline声明事务对象database_source和database_destination

连接数据库脚本如下:

//连接源数据库

database_source=Createtransaction

//为database_source对象属性赋值

//连接语句

Connectusingdatabase_source;

//判断是否成功

ifdatabase_source.SQLCode$#@60;$#@62;0then

beep

(1)

MessagBox(“系统出错:

”,“源数据库连接错误”,Exclamation!

Halt

Endif

//连接目标数据库

database_destination=Createtransaction

//为database_destination对象属性赋值

//连接语句

Connectusingdatabase_destination;

ifdatabase_destination.SQLCode$#@60;$#@62;0then

beep

(1)

MessagBox(“系统出错:

”,“目标数据库连接错误”,Exclamation!

Halt

Endif

(2)创建支撑用户对象实例。

//首先声明变量iuo_pipe_exchange:

u_pipe_exchangeiuo_pipe_exchange

然后再在uevent_pipe_setup用户事件中创建u_pipe_exchange的实例并赋值给iuo_pipe_exchange变量:

iuo_pipe_exchange=CREATEu_pipe_exchange

(3)定义需使用的特定管道对象,即在相应事件脚本中把某一管道对象的字符串赋给支撑用户对象实例的DataObject属性值。

本例中使用了两个不同的管道对象:

pipe_user_table01和pipe_user_table02。

Cb_start命令按钮的事件操作根据单选按钮的值来决定启动哪个管道对象进行操作,代码为:

ifrb_create.checked=truethen

iuo_pipe_exchange.dataobject=’pipe_user_table01’

elseiuo_pipe_exchange=’pipe_user_table02’

endif

三、启动数据管道

  在做好初始化工作后,就可以启动管道操作了。

为了实现这一功能首先需在相应的事件脚本中写入启动程序代码,利用支撑用户对象的Start函数来启动指定的管道操作。

Start函数需指明如下参数:

源数据库的事务对象;

目标数据库的事务对象;

显示错误信息的数据窗口控件;

在管道对象中定义的检索参数。

缺省时,程序运行中自动让用户输入该参数值。

启动管道后,还需验证Start函数的值来判断操作成功与否。

示例脚本:

//database_source为源数据库的事务对象

//database_destination为目标数据库的事务对象

//dw_errors为显示错误信息的数据窗口控件

intergerpipe_start_result

pipe_start_result=iuo_pipeline_exchange.Start(database_source,database_destination,&

dw_errors)

choosecasepipe_start_result

case?

1

Beep

(1)

MessageBox(“程序运行错误”,”管道打开失败”,Exclamation!

Return

case?

3

Beep

(1)

MessageBox(“程序运行错误”,”pipe_user_table01表已经存在”,Exclamation!

Return

Case?

4

Beep

(1)

MessageBox(“程序运行错误”,”pipe_user_table01表不存在”,Exclamation!

Return

Endchoose

在写入数据信息窗口可以浏览管道操作成功的数据项,在此不再详细说明,用户可以参照数据窗口控件进行编程。

四、处理程序运行中移动数据的错误行

  Start函数把所有的错误行都放置于dw_errors数据窗口控件中,此数据窗口控件为每一行提供了一个错误信息列。

  数据窗口控件中一旦有错误行,用户可以进行修复或删除操作。

注意将修复按钮和不修复按钮的enable属性赋值为true。

同时,为监控程序进行的情况,在窗口w_yz_pipeline的open事件脚本中加入如下代码:

iuo_pipe_exchange.ist_status_read=St_status_read

iuo_pipe_exchange.ist_status_written=St_status_written

iuo_pipe_exchange.ist_status_error=St_status_error

  修复操作调用Repair函数,然后根据函数的返回值判断修复成功与否。

相关按钮Clicked事件脚本如下:

ifu_pipe_exchange.repair(database_destination)$#@60;$#@62;1then

beep

(1)

MessageBox(“修复操作:

”,“程序运行错误”,Exclamation!

Return

Endif

  不修复操作按钮Clicked事件脚本如下:

dw_errors.Reset()

五、执行数据移动完毕后的收尾操作

  当应用程序完成管道操作后,退出应用程序时,应释放管道操作开始时获得的一些资源。

窗口w_yz_pipeline的close事件脚本如下:

//清除支撑用户对象实例

DESTROYu_pipe_exchange

//关闭与源数据库的连接

DISCONNECTUSINGdatabase_source

Ifdatabase_source.SQLCode=-1then

Beep

(1)

MessageBox(“程序出错:

”,”无法关闭源数据库”,Exclamation!

Endif

//清除源事物对象实例

DESTROYdatabase_source

//关闭与目标数据库的连接

DISCONNECTUSINGdatabase_destination;

Ifdatabase_destination.SQLCode=-1then

Beep

(1)

MessageBox(“程序出错:

”,”无法关闭目标数据库”,Exclamation!

Endif

//清除目标事物对象实例

DESTROYdatabase_destination

在PowerBuilder中我们可以通过数据管道,在不同数据库表之间移动数据,实现一个或多个表中的数据拷贝到一个新的或已经存在的目标数据表中。

这种操作可以在不同数据库,甚至不同的DBMS之间进行。

  PowerBuilder提供了强大的数据管道技术(DataPipeline)。

我们通常使用的有如下两种方式:

  直接使用pb画板中提供的实用工具  在应用程序中实现数据移动  本文着重结合具体实例讲述在应用程序中如何实现数据管道技术。

在应用程序中使用数据管道有以下五个基本步骤:

  创建应用程序所需对象;  执行数据管道初始化操作;  启动数据管道;  处理程序运行中移动数据的错误行;  执行数据移动完毕后的收尾操作。

  创建应用程序所需对象  为了在应用程序中实现数据管道,需建立以下几个不同的对象:

数据管道对象、支撑用户对象、窗口对象。

  创建数据管道对象这是为实现管道功能所必须的,可在Powerbuilder提供的pipeline画板中创建并定义它的特征。

示例在pipeline画板中创建应用程序需要的数据管道对象pipe_user_table01。

在此着重说明Commit和MaxErrors文本框中参数的意义。

  Commit中选中ALL:

当所有行在管道操作完成后再向数据库提交,如果操作过程中被终止,则撤消对表的所有操作。

  MaxErrors文本框中选中NOLIMIT:

不论有多少行出错都不终止管道操作。

此处视实际编程需要可选其它数字。

  创建支撑用户对象为了提供对属性、事件及函数的支持,需创建一个继承PB管道系统对象的用户对象,通过这个用户对象来管理管道操作。

  创建过程如下:

  第一步,打开用户对象画板,单击New按钮,在NewUserObject对话框中选择Class组框中的Standard作为用户对象类型。

  第二步,在SelectStandardClassType对话框中选取继承pipeline内置系统对象。

  声明管道监控实例为使用户及时了解程序的运行情况,在创建支撑用户对象画板的工作区使用选单项DeclareInstanceVariables中声明三个静态文本的监控实例:

ist_status_read,ist_status_written,ist_status_error。

编辑支撑对象的PipeMeter事件脚本,语句为:

  ist_status_read.text=String(RowsRead)  ist_status_written.text=String(RowsWritten)  ist_status_error.text=String(RowsInError)  保存用户对象示例创建支撑用户对象命名为u_pipe_exchange。

  示例创建窗口对象w_yz_pipeline为了完成与管道对象进行交互和监控,该窗口应完成以下基本操作:

启动管道→发现错误→显示并修复错误→终止管道操作。

在创建此对象时,必须包括一件数据窗口控件,此控件为数据管道提供错误行显示。

并且,由应用程序提供此控件的数据窗口对象,不必由用户指定。

  执行数据管道初始化操作  执行初始化操作步骤:

  连接管道操作的源数据库和目标数据库:

  首先在窗口w_yz_pipeline声明事务对象database_source和database_destination。

  连接数据库脚本如下:

  database_source=Createtransaction  …  Connectusingdatabase_source;  ifdatabase_source.SQLCode<>0then  beep

(1)  MessagBox(“系统出错:

”,“源数据库连接错误”,Exclamation!

)  Halt  Endif  database_destination=Createtransaction  …  Connectusingdatabase_destination;  ifdatabase_destination.SQLCode<>0then  beep

(1)  MessagBox(“系统出错:

”,“目标数据库连接错误”,Exclamation!

)  Halt  Endif  创建支撑用户对象实例:

  u_pipe_exchangeiuo_pipe_exchange  然后再在uevent_pipe_setup用户事件中创建u_pipe_exchange的实例并赋值给iuo_pipe_exchange变量:

  iuo_pipe_exchange=CREATEu_pipe_exchange  定义需使用的特定管道对象:

  即在相应事件脚本中把某一管道对象的字符串赋给支撑用户对象实例的DataObject属性值。

本例中使用了两个不同的管道对象:

pipe_user_table01和pipe_user_table02。

Cb_start命令按钮的事件操作根据单选按钮的值来决定启动哪个管道对象进行操作,代码为:

  ifrb_create.checked=truethen  iuo_pipe_exchange.dataobject=’pipe_user_table01’  elseiuo_pipe_exchange=’pipe_user_table02’  Endif  启动数据管道  在做好初始化工作后,就可以启动管道操作了。

为了实现这一功能首先需在相应的事件脚本中写入启动程序代码,利用支撑用户对象的Start函数来启动指定的管道操作。

Start函数需指明如下参数:

  源数据库的事务对象  目标数据库的事务对象  显示错误信息的数据窗口控件  在管道对象中定义的检索参数  启动管道后,还需验证Start函数的值来判断操作成功与否。

  示例脚本:

  integerpipe_start_result  pipe_start_result=iuo_pipeline_exchange.Start(database_source,database_destination,&&  dw_errors)  choosecasepipe_start_result  case-1  Beep

(1)  MessageBox(“程序运行错误”,”管道打开失败”,Exclamation!

)  Return  case-3  Beep

(1)  MessageBox(“程序运行错误”,”pipe_user_table01表已经存在”,Exclamation!

)  Return  Case-4  Beep

(1)  MessageBox(“程序运行错误”,”pipe_user_table01表不存在”,Exclamation!

)  Return  Endchoose  在写入数据信息窗口可以浏览管道操作成功的数据项,在此不再详细说明,用户可以参照数据窗口控件进行编程。

  处理程序运行中移动数据的错误行  Start函数把所有的错误行都放置于dw_errors数据窗口控件中,此数据窗口控件为每一行提供了一个错误信息列。

  为监控程序进行的情况,在窗口w_yz_pipeline的open事件脚本中加入如下代码:

  iuo_pipe_exchange.ist_status_read=St_status_read  iuo_pipe_exchange.ist_status_written=St_status_written  iuo_pipe_exchange.ist_status_error=St_status_error  修复操作调用Repair函数,然后根据函数的返回值判断修复成功与否。

相关按钮Clicked事件脚本如下:

  ifu_pipe_exchange.repair  (database_destination)<>1then  beep

(1)  MessageBox(“修复操作:

”,“程序运行错误”,Exclamation!

)  Return  Endif  不修复操作按钮Clicked事件脚本如下:

  dw_errors.Reset()  执行数据移动完毕后的收尾操作  当应用程序完成管道操作后,退出应用程序时,应释放管道操作开始时获得的一些资源。

窗口w_yz_pipeline的close事件脚本如下:

  DESTROYu_pipe_exchange  DISCONNECTUSINGdatabase_source  Ifdatabase_source.SQLCode=-1then  Beep

(1)  MessageBox(“程序出错:

”,”无法关闭源数据库”,Exclamation!

)  Endif  DESTROYdatabase_source  DISCONNECTUSINGdatabase_destination;  Ifdatabase_destination.SQLCode=-1then  Beep

(1)  MessageBox(“程序出错:

”,”无法关闭目标数据库”,Exclamation!

)  Endif  DESTROYdatabase_destination

下面是我自己实现的一个用timer定时读pipe的例子:

w_pipetimer的open事件

///////////////////////////////////////////////////////

database_destination=createtransaction

database_destination.DBMS="MSSMicrosoftSQLServer"

database_destination.Database="moonprice"

database_destination.ServerName="wfn"

database_destination.LogPass='121'

database_destination.LogId="sa"

database_destination.AutoCommit=False

connectusingdatabase_destination;

ifdatabase_destination.sqlcode<>0then

messagebox("","1error")

endif

database_source=createtransaction

//Profileproc_unit

database_source.DBMS="MSSMicrosoftSQLServer"

database_source.Database="proc_unit"

database_source.ServerName="wfn"

database_source.LogPass='121'

database_source.LogId="sa"

database_source.AutoCommit=False

database_source.DBParm=""

connectusingdatabase_source;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1