实现PB数据窗口多表同时更新的方法

:1671-9662(2003)03-0037-03实现PB数据窗口多表同时更新的方法王建华1,黄鹏2(1.中国神马集团有限责任公司,河南平顶山467000;2.平顶山天鹰集团有限责任公司,河南平顶山467000摘要:阐述了在PowerBuilder的数据窗口中,如何通过建立一个全局函数,并对其进行调用,而实现数据窗口的多表同时更新的方法。关键词:全局函数;多表;更新;调用:TP311.138PB文献标识码:APowerBuilder是目前公认的、最佳的数据库前端开发工具之一,其数据窗口对象封装性好,功能强大,表现形式丰富多样,是PB应用区别于其它应用的重要特征,也是PB中的关键技术。PB的应用程序通过数据窗口从数据库或其它数据源取得数据并加以显示,其数据的输入、添加、修改和删除也大多是通过数据窗口来实现的。1问题提出一般情况下,一个数据窗口只能更新一个数据库表,但在实际开发应用程序过程中,处理数据时,经常遇到需要将几个表中的数据放入一个数据窗口中进行处理,通常情况下多表数据源的数据窗口只能用于数据的检索,而不能更新。怎样才能实现数据窗口的多个表同时更新呢?在工作中,几经摸索,尝试了多种双表更新的方法,探索出一个比较通用可行的解决方法。2实施步骤①首先在数据库里建立两张表或多张表。②在建立数据窗口时,选择SQLSelect,显示风格可以是Tabular、Grid或FreeForm中的任一种,选择一种显示方式③选出两表需要录入或修改的列,其中两表的主键和非空列必须选中,确定选择条件,建立连接关系。④再选“Rows”菜单中的“UpdateProperties”项,在打开的“SpecifyUpdateProperties”窗口中选择第一个表的全部数据项为可更新项。⑤把两表需要修改项的TabOrder数值改为非0值,使其在数据窗口中成为可修改项。⑥建立一个全局函数f-update-2table。⑦调用全局函数f-update-2table,实现数据窗口的多表同时更新。调用方法:假设窗口名为w-update,数据窗口为dw-1,数据库表名和主键名分别为t1、t2、k1、k2,放置“存盘”按钮,按钮Clicked事件的Script语句如下:dw-1.AcceptText()IFdw-1.ModifiedCount()>0ordw-1.DeletedCount()>0THENIFMessageBox“(提示信息”“,是否存盘?”,Question!,YesNo!)=1THENIFf-update-2table(dw-1“,t1”“,t2”“,k1”“,k2”)THENCommit;ELSERollback;ENDIFENDIF---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---为了使该方案具有通用性,建立一个全局函数f-update-2table,该函数有五个参数:dw-obj、table1、table2、key1、key2,分别代表所要更新的数据窗口、两表表名和两表主键列名,其中dw-obj为DataWindow类型,其余四参数均为String类型。该函数返回值为Boolean型,返回True表示成功,返回False表示失败。3.1建立全局函数的思路①先针对第一个数据库表调用Update函数更新。此时注意参数的使用:第一个参数作用是控制数据窗口更新前是否强制性调用AcceptText(),在数据窗口更新前通过有效性验证;第二个参数是控制更新标志的复位,为True时更新标志复位,为False时更新标志不复位;②更改数据窗口的UpdateTable属性,使其指向第二个表,并把第一个表的各数据项Update属性和主键列的Key属性改为No,接着把第二个表的各数据项Update属性和主键列的Key属性改为Yes;③调用Update函数更新第二个表;④两表更新成功后,把两表的列属性、主键属性改回到初始状态,以便为下一次的两表更新调用做好准备;3.2对全局函数编写脚本//ColName:数据窗口列名//Name1,Name2:两数据库表选中项列名//n1,n2:两数据库表选中项数量//i:循环计数器//Columns:数据窗口总列数StringColName,Name1,Name2IntegerColumns,i,n1=0,n2=0//下面程序:找出dw-obj的两表列名赋给Name1,Name2Columns=Integer(dw-obj.Describe“(DataWindow.Column.Count”))FORi=1TOcolumnsColName=Upper(dw-obj.Describe“(#”+String(i)+“.Name”))IFLeft(ColName,Len(Table1))=Table1andColName<>Key1THENn1=n1+1Name1n1=ColNameENDIFIFLeft(ColName,Len(Table2))=Table2andColName<>Key2THENn2=n2+1Name2n2=ColNameENDIFNEXT//下面程序:存储dw-obj,确定返回值(True:成功,False:失败)IFdw-obj.Update(True,False)=1THENFORi=1TOn1dw-obj.Modify(Name1i+...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?