第三十五讲 数据管道 打印本页  
 
  在应用系统的开发过程中,经常会碰到这样的问题,有许许多多不同种类的数据源,而且要运用转换工程将这些数据从一个数据库(例如Sybase数据库)移到另一个数据库(例如Oracle数据库),既要求应用程序具有数据迁移功能。数据管道就提供了这样功能,既提供了在同一数据库内或不同数据库之间,甚至是不同的数据库管理系统之间快速复制数据的途径。
  在PowerBuilder 中,使用数据管道画板(Data Pipeline)来完成这一功能,PowerBuilder的数据管道画笔有两种使用方式:一是在数据管道画板(Data Pipeline)中定义了数据管道后,直接运行数据管道,这种方式方便了开发人员开发和测试应用程序。
  在下面的两讲中将通过具体例子,对数据管道的使用作详细的讲解。

  35.1 使用Data Pipeline画笔创建数据管道

  1. 在PowerBuilder 的开发环境中单击PowerBar上的Pipeline 图标,打开Select DataPipeline(选择数据管道)对话框,单击New,显示New Data Pipeline(新数据管道)对话框。
  2. 在New Data Pipeline(新数据管道)对话框中要选择源连接(Source Connection)和目的连接(Destination Connection)以及数据源(Data Source)。 创建一个数据管道时,必须选择一个源连接和一个目的连接。源连接是数据和表单当前存在的位置,目的连接是数据和表单将要被传送到的位置。
  一个新的数据管道有四种可能的数据源:
  · Quick Select —— 从源连接(Source Connection)中选择单个表,并从该表中为数据管道选择域。
  · SQL Select —— 用源连接(Source Connection)中的一个或多个表构造(Construct)一个复杂的查询。
  · Query —— 选取一个已存在的查询,并使其输出用于数据管道。
  · Stored Procedure —— 在源连接(Source Connection)中选择一个存储过程,并使其输出用于数据管道。
  3. 在New Data Pipeline 对话框中,选择Quick Select,点击OK,进入Quick Select对话框,选择要处理的表和域。
  4. 点击OK按钮后,显示Data Pipeline(数据管道)画笔
  5. 定义了表、列以及数据管道传输过程中使用的Where条件后,点击SQL图标。它将再一次打开数据管道画笔,不过这时显示的数据都是经过Where SQL语句过滤后数据了。
  6. 定义了管道后,点击PainterBar上的Destination Profile图标,保证目的数据库外型建立正确,打开Destination Profile对话框。
  7. 选择File菜单,Save。引导出Save Data Pipline对话框,保存数据管道,如图10.8所示。保存后,点击PainterBar上的Execute图标,数据就开始传输了。

  35.2 在用户对象中使用数据管道

  第一步:新建一个应用程序对象。保存为Pipeline.pbl中的pipe。
  定义全局变量,用于存储INI文件的路径,及文件名。
  在Application对象Script中写入程序。与上一讲的程序基本一致,主要作用是初始化,与后台数据库建立连接,同时打开主窗体界面
  第二步:建立好一个数据管道,保存为p_customer,在此选用的数据源为:Powersoft Demo DB V6,目标数据库也为:Powersoft Demo DB V6,要Pipeline的表名是:customer。
  第三步:建立一个用户自定义的数据管道对象:uo_pipeline
  1.首先在PowerBar上,单击User Object图标,打开Select User Object对话框。
  2.点击New按钮,打开New User Object对话框,定义一个新的用户对象。选取标准类用户对象(Standard Class)。
  3.显示Select Standard Class Type对话框,选择Pipeline后点击OK按钮。
  4.保存这个新的数据管道类型的用户对象(命名为uo_pipeline)。
  第四步:建立应用程序的主界面w_pipeline
  添加控件。
  添加两个名称分别为:cb_exit和cb_pipeline 的CommandButton。
  添加一个Data Window控件,当数据管道执行时,如果出现错误,Powerbuilder将在此Data Window中显示错误信息。
  编写程序:打开cb_exit控件的clicked事件,编写程序:
  close(parent)