第15章数据管道.ppt

上传人:s****8 文档编号:69239732 上传时间:2022-12-31 格式:PPT 页数:27 大小:142KB
返回 下载 相关 举报
第15章数据管道.ppt_第1页
第1页 / 共27页
第15章数据管道.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《第15章数据管道.ppt》由会员分享,可在线阅读,更多相关《第15章数据管道.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第1515章章 数据管道数据管道 教学目标教学重点教学过程教学目标了解数据管道的创建过程 能对数据进行管道操作 教学重点创建数据管道创建数据管道对象删除数据管道执行初始化操作纠正管道错误 教学过程数据管道概述 创建数据管道对象 数据管道对象的属性、事件和函数数据管道编程实例数据管道概述要修改表的表名、列名、类型、宽度、null值等时,有时很难修改,可利用数据管道修改。此外,复制表的结构及表中部分或全部数据、将一个表中的数据加到另一个表中,将一个数据库中的表复制到另一个数据库中,都可以利用数据管道来实现。数据管道提供了在数据库内部、数据库之间,甚至不同的数据库管理系统之间快速复制数据的简便途径

2、。在pb中,数据管道既可以在开发环境下,通过工具栏的数据库画板完成相应操作,也可以在程序中通过编写代码使用数据管道。15.1创建数据管道当需要创建应用使用的数据管道的时候,必须创建一个数据管道对象,在管道对象中定义管道的数据和访问方法。在pb中,有两种方式可以创建数据管道:(1)在数据库画板中在画板中创建的数据管道,默认为源数据库和目标数据库相同,若要求目标数据库和源数据库不同,须通过工具栏选择相应的命令设置。(2)通过创建数据管道对象通过创建数据管道对象的方法,要选择源数据库和目标数据库,可以相同也可不同。1、在数据库画板中创建数据管道在数据库画板中,在已连接的数据库中选择要复制的表,单击鼠

3、标右键,出现一个弹出式选单,选单中选择data Pipeline,开始创建数据管道。可以查看和修改源数据库与目标数据库,编辑sql数据源,定义检索参数等。表 数据管道个选择项的含义名称含义说明Table目标表名默认名:源表名+_copy”Options选择管道操作方式有5种选择Commit选择多少条记录作为一个事务提交默认值100Key目标表的主键名称可以修改目标表的主键名称Max errors选择允许出现的最多错误个数在复制过程中错误个数达到这个值时,将停止复制。默认100Extended attributes 是否复制表的扩展属性默认为否Source name源表列名Source type

4、源表的列的类型Destination name目标表的列名可以更改目标表的列名Type目标表的列类型可以更改目标表的列类型Key该列是否是目标表中的主键默认值与源表的相同Width目标表中列的宽度可以更改,默认值与源表的相同Dec目标表的列的小数位可以更改,默认值与源表的相同Nulls设置目标表的null值可以更改,默认值与源表的相同Initial value设置目标表列的初始值Default balue指定目标表列的默认值注意:当源表中有数据时,更改目标表的列的类型与宽度应小心。宽度变小可能丢失数据,改变列的类型可能导致类型转换错误。数据管道的命名一般用p_作为前缀。数据管道的操作方式opt

5、ions名称含义Create-add table在目标数据库中创建指定的目标表,如果目标数据库中已经存在同名的表,执行时将显示一个对话框,提醒用户表已经存在Replace-drop/add table在目标数据库中创建指定的目标表。如果目标数据库中已经存在同名的表,将首先删除表,然后创建Refresh-delete/insert rows将删除目标数据库中指定目标表中的所有数据,然后再插入从源表选择的数据。要求目标表已经存在,目标表不存在时,操作将失败Append-insert rows保留目标表中原有数据,然后再插入从源表选择的数据Update-update/insert rows对源表中主

6、键值与目标表中主键值匹配的行执行update语句,修改目标表中相应行;对源表中主键值与目标表中主键值不匹配的行执行insert语句,将相应行插入到目标表1.创建数据管道对象newdatabase|DataPipeline2.打开和修改数据管道数据管道保存后,可以再次打开和修改。使用Open菜单。3.删除数据管道在数据管道上单击鼠标右键,在弹出的快捷菜单中选择“Delete”命令就可以删除数据管道了,需要注意的是,在删除数据管道前要将数据管道窗口关闭,否则无法进行下去。15.2数据管道对象的属性、事件和函数1、数据管道属性(1)dataobject,string类型,用于保存数据管道对象名(在数

7、据库画板中创建的对象),其作用与数据窗口控件的同名属性的作用相似。该属性指定与数据管道对象相关联的数据管道对象名。此属性只能在代码中设置。例:u_pipeline.dataobject=p_student其中,u_pipeline是数据管道对象的实例,p_student是在数据库画板中创建的数据管道对象的名称。(2)RowsInError,long类型,它指示数据管道运行过程中发现的错误个数。(3)RowsRead,long类型,它指示数据管道运行过程中当前已经读取的行数。(4)RowsWritten,long类型,它指示数据管道运行过程中已经写入的行数。(5)RowsInError、Rows

8、Read和RowsWritten属性提供数据管道运行过程中的状态信息。(6)syntax,string类型,保存用于创建数据管道对象的语法(在数据管道画板中创建的对象)。(1)constructor:在数据管道用户对象创建时触发。(2)destructor:在数据管道用户对象删除时触发。(3)pipestart:开始执行start()或repair()函数时触发。(4)pipemeter:每次读或写一块数据时触发,设计数据管道对象时定义的commit参数的大小决定了块的大小。也就是说,数据管道每执行一个数据库事务时都会触发该事件。(5)pipeend:start()或repair()函数执行结

9、束时触发。2.事件3.数据管道函数(1)start()函数Start()函数执行数据管道对象,将数据从源表按sql select语句指定的要求复制到目标表中。格式:pipelineobject.start(sourcetrans,destrans,errordwarg1,arg2,argn)其中:pipelineobject是包含要执行数据管道对象的数据管道用户对象名称。sourcetrans是连接到源数据库的事务对象名,可以是默认的事务对象sqlca,也可以是应用程序创建的事务对象。destrans是连接到目标数据库的事务对象名,可以是默认的事务对象sqlca,也可以是应用程序创建的事务对象

10、。errordw是个数据窗口控件名,该控件用于显示数据管道运行过程中出现的错误。程序中无需把某个数据窗口对象关联到该控件上,系统会根据出现的数据管道错误自动生成所需要的数据窗口对象。如果程序中已经在该控件上关联了某个数据窗口对象,运行时该对象将被数据管道创建的对象取代。arg1,arg2,argn是可选参数,对应与定义数据管道数据源时select语句所需的检索参数。Start()函数返回一个integer值时数据管道的运行是否成功,返回值的意义为:1函数执行成功-1 打不开数据管道-2 列数太多-3 要创建的表已经存在-4 要增加数据的表不存在-5 未建立与数据库的连接-6 参数错误-7 列不

11、匹配-8 访问源数据库的sql语句致命错误-9 访问目标数据库的sql语句致命错误-10 已经达到指定的最大错误数-12 不正确的表达法-13 需要关键字、但未指定关键字-15 数据管道已经在运行-16 源数据库出错-17 目标数据库出错-18 目标数据库处于只读状态,不能写入数据(2)cancel()函数函数在数据管道运行过程中,执行cancel()函数后将终止数据管道的执行。格式:pipelineobject.cancel()该函数执行成功返回1,失败时返回0。(3)repair()函数函数数据管道运行后,如果某些行不能传送到目标数据库,就产生错误,出错的行显示在与数据管道对象相关联的数据

12、窗口中,用户在数据窗口中修改了数据后,使用repair()函数,将修改结果传送到目标数据库。格式:pipelineobject.repair(destrans)其中:pipelineobject是包含要执行数据管道对象的数据管道用户对象名称。destrans是连接到目标数据库的事务对象名。repair()函数的返回值:1 函数执行成功-5 未建立与数据库的连接-6 参数错误-9 访问目标数据库的sql语句致命错误-10 已经达到指定的最大错误数-12 不正确的表达法-15 数据管道已经在运行-17 目标数据库出错-18 目标数据库处于只读状态,不能写入数据15.3数据管道编程实例数据管道编程实

13、例数据管道要使用,需要按照以下步骤使用:1、初始化操作当创建好所需要的基本对象后,就可以编写相应的脚本,使管道能够在应用程序中执行。但是,首先必须完成一些初始化操作,为应用程序处理管道运行做准备。为管道连接源数据库和目标数据库。为此,可以在应用程序的事件中编写连接代码,例如:/创建一个新的事务对象实例,并保存在事先声明的itrans_source事务变量中itrans_source=CREATE transaction/然后为itrans_source事务对象赋值/连接源数据库CONNECT USING itrans_source;创建支持用户对象的一个实例,以便在应用程序中能够使用该支持该用

14、户对象的属性、事件及函数。可以使用Create语句创建用户对象的实例,将它赋值给一个变量。u_pipecreate pipeline 定义使用的管道对象。可以使用赋值语句将包含目的管道对象的名称字符串赋值给用户对象实例的DataObject属性。U_pipeline.Dataobjectp_object2、启动管道、启动管道执行完初始化操作后,就可以启动管道执行操作了,可以在相应的脚本中编码Start函数。在Start函数中需定义:源数据库的事务对象。目标数据库的事务对象。显示错误信息的数据窗口控件。在管道对象中定义的提取参数的值。如果忽略这些值,Start函数将提示用户输入值。RetU_pi

15、pe.Start(itrans_source,itrans_des,w_pipe,dw_1)当启动管道操作后,还需要测试Start函数的返回值来判断Start函数是否成功执行。测试Start函数的返回值并不是监控管道执行状态的惟一方式,提取统计值也可支持用户了解处理的行统计数据,包括:管道从源数据表中读取的行数。被管道插入到目标表中的行数。管道向错误数据窗口控件中写入的行数。3、处理行错误 在运行过程中,管道也许会因为某种原因不能将某一行写入目标表中,例如,若往目标表中写入行的码值与表中某一行的码值相同,就不能完成该操作。这时,用户可以修改列的值,使得目标表能够接收数据行。因此可以执行如下操作

16、:在错误行可以修改适当的列,也可以修改数据值。单击工具栏“Update DB”按钮,或者选择“Design”“Update Database”命令,来更新数据库。重复上面的步骤,直到处理了所有错误。在有些情况下,可能需要允许用户或应用程序完全抛弃数据窗口中的一个或多个错误行。这对于处理那些不值得修复的错误行是十分有用的。4、结束操作 应用程序完成了所有的管道操作后,还需要进行一些清除操作,释放在管道执行过程中占用的资源。为此,可执行下面的操作:释放所创建的用户对象实例。destroy u_pipe关闭与源数据库和目标数据库之间的连接。可以使用DISCONNECT语句。清除源事务对象实例和目标事

17、务对象实例。可以使用DESTROY语句。destroy localdb例:编程实现不同数据库之间的数据复制或数据传递。在窗口中定义实例变量:/serverdb用来链接服务器数据库,localdb用来链接本地数据库transaction serverdb,localdbpipeline u_pipe/定义数据管道对象u_pipe在窗口的open事件中:/定义事务对象实例变量和数据管道实例变量serverdb=create transactionlocaldb=create transactionu_pipe=create pipeline在窗口的close事件中:/释放数据管道对象和事务处理对象

18、destroy u_pipedisconnect using localdb;destroy localdb;disconnect using serverdb;destroy serverdb;在“取消”按钮中:int retret=u_pipe.cancel()if ret=1 thenmessagebox(取消操作成功,终止管道运行!)elsemessagebox(取消操作失败,未能终止管道运行!)end if在窗口中定义窗口函数wf_connectlocaldb链接本地数据库,代码如下:localdb.autocommit=truelocaldb.database=xjgllocald

19、b.dbms=odbclocaldb.dbparm=ConnectString=DSN=xjgl_accessconnect using localdb;return localdb.sqlcode在窗口中定义窗口函数wf_connectserverdb链接服务器数据库,代码如下:serverdb.dbms=odbcserverdb.autocommit=trueserverdb.database=xjglserverdb.userid=dbaserverdb.dbpass=sqlserverdb.dbparm=ConnectString=DSN=xjgl;UID=dba;PWD=sqlcon

20、nect using serverdb;return serverdb.sqlcode在窗口中定义窗口函数wf_error处理错误,代码如下:string msgchoose case retcase-1 msg=打不开数据管道case-2 msg=列数太多case-3msg=要创建的表已经存在case-4msg=要增加数据的表不存在case-5msg=未建立与数据库的链接end choosemessagebox(数据管道出错,msg,stopsign!,ok!)在窗口中定义窗口函数wf_startpipe执行管道操作,代码如下:int retu_pipe.dataobject=p_objec

21、tret=u_pipe.start(sourcetrans,desttrans,w_pipeline.dw_1)if ret1 thenwf_error(ret)elsemessagebox(,操作成功)end ifsle_1.text=string(u_pipe.Rowsread)sle_2.text=string(u_pipe.rowswritten)sle_3.text=string(u_pipe.rowsinerror)在“开始”按钮中代码如下:int retret=wf_connectserverdb()if ret0 thenmessagebox(,不能链接服务器数据库!)returnend ifret=wf_connectlocaldb()if ret0 thenmessagebox(,不能链接本地数据库)returnend ifif rb_down.checked thenwf_startpipe(serverdb,localdb,p_stol)elsewf_startpipe(localdb,serverdb,p_ltos)end if

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁