前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

实现PowerBuilder数据窗口的多表更新 - 永生天地 - 博客频道 - CSDN.NET 永生天地 技术 文档 视频 资源 目录视图 摘要视图 订阅 新年新气象------CSDN2014新版导航就要跟大家见面了 2014年1月微软MVP当选名单揭晓! “我的2013”年度征文获奖名单已公布 专访宋海涛:我们在做一款比Google Glass更酷的设备 实现PowerBuilder数据窗口的多表更新 分类: [Sybase] - [pb] 2009-07-20 21:47 540人阅读 评论(0) 收藏 举报 PowerBuildertable数据库integerstringn2 实现PowerBuilder数据窗口的多表更新   PowerBuilder的数据窗口对象是其特有的智能对象,其封装性好、功能强大、表现形式丰富多样,为此,许多MIS开发人员对PowerBuilder推崇备至,将其视为首选开发工具。   一般情况下,一个数据窗口只能更新一个数据库表,但在MIS开发过程中,我们经常遇到这种情况:一个数据窗口中由两个或更多个数据库表作为数据源,并需要对其进行录入或修改,如何给出多表更新的通用解决方案就成为MIS开发人员不容回避的问题。笔者在某管理信息系统的开发过程中,尝试了几种双表更新的解决方法,选出一种比较好的方案,以飨读者。   一、具体步骤   1. 在数据窗口建立时,选择SQL Select,显示风格可以是Tabular、Grid或FreeForm中的任一种。选出两表需要录入或修改的列,其中两表的主键和非空列必须选中,确定选择条件,建立连接关系。   2. 在选单“Rows/Update”中选择第一个表的全部数据项为可更新项。   3. 把两表需要修改项的Tab Order数值改为非0值,使其在数据窗口中成为可修改项。   为了使方案具有通用性,建立全局函数f_update_2table,有五个参数:dw_obj、table1、table2、key1、 key2,分别代表所要更新的数据窗口、两表表名和两表主键列名,其中dw_obj为DataWindow类型,其余四参数均为String类型。该函数返回值为Boolean型,返回True表示成功,返回False表示失败。   二、函数思路   1. 先针对第一个数据库表调用Update函数更新。注意参数的使用:第一个参数作用是控制数据窗口更新前是否强制性调用AcceptText(),在数据窗口更新前通过有效性验证;第二个参数是控制更新标志的复位,为True时更新标志复位,为False时更新标志不复位。   2. 更改数据窗口的UpdateTable属性,使其指向第二个表,并把第一个表的各数据项Update属性和主键列的Key属性改为No,接着把第二个表的各数据项Update属性和主键列的Key属性改为Yes。   3. 调用Update函数更新第二个表。   4. 两表更新成功后,把两表的列属性、主键属性改回到初始状态,以便为下一次的两表更新调用做好准备。 三、程序清单   // ColName:数据窗口列名   // Name1[],Name2[]:两数据库表选中项列名   // n1,n2:两数据库表选中项数量   // i:循环计数器   // Columns:数据窗口总列数   String ColName,Name1[],Name2[]   Integer Columns,i,n1=0,n2=0   //下面程序:找出dw_obj的两表列名赋给Name1[],Name2[]   Columns=Integer(dw_obj.Describe("DataWindow.Column.Count"))   FOR i=1 TO columns ColName=Upper(dw_obj.Describe("#"+String(i)+".Name")) IF Left(ColName,Len(Table1))=Table1 and ColName〈〉Key1 THEN n1=n1+1 Name1[n1]=ColName END IF IF Left(ColName,Len(Table2))=Table2 and ColName〈〉Key2 THEN n2=n2+1 Name2[n2]=ColName END IF   NEXT   // 下面程序:存储dw_obj,确定返回值(True:成功,False:失败)   IF dw_obj.Update(True,False)=1 THEN    FOR i=1 TO n1    dw_obj.Modify(Name1+".Update=No")    NEXT dw_obj.Modify(Key1+".Key=No")   dw_obj.Modify("DataWindow.Table.Update   Table=' "+Table2+" ' ") FOR i=1 TO n2   dw_obj.Modify(Name2+".Update=Yes") NEXT    dw_obj.Modify(Key2+".Key=Yes") IF dw_obj.Update()=1 THEN Commit; FOR i=1 TO n1 dw_obj.Modify(Name1+".Update=Yes") NEXT dw_obj.Modify(Key1+".Key=Yes") dw_obj.Modify("DataWindow.Table.UpdateTable=' "+Table1+" ' ") FOR i=1 TO n2 dw_obj.Modify(Name2+".Update=No") NEXT dw_obj.Modify(Key2+".Key=No") return True ELSE Rollback; return False END IF   ELSE Rollback; return False   END IF   四、调用方法   假设窗口名为w_update,数据窗口为dw_1,数据库表名和主键名分别为t1、t2、k1、k2,放置“存盘”按钮,按钮Clicked事件的Script语句如下:   dw_1.AcceptText()   IF dw_1.ModifiedCount()〉0 or dw_1.DeletedCount()〉0 THEN IF MessageBox("提示信息","是否存盘?",Question!,YesNo!)=1 THEN    IF f_update_2table(dw_1,"t1","t2","k1","k2") THEN    Commit; ELSE Rollback;    END IF    END IF   END IF     综上所述,可以看出,该方案具有很好的可扩展性,稍加修改即可解决多表作为数据源的数据窗口的同步更新问题。 更多 上一篇:PB对数据库字段varchar类型255的限制问题 下一篇:f_retkey 返回按键string 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 xys_777 访问:442878次 积分:6234分 排名:第785名 原创:186篇 转载:152篇 译文:1篇 评论:212条 文章搜索 文章分类 [Microsoft] - [.net](9) [Microsoft] - [access](3) [Microsoft] - [bat](1) control(1) [Adobe] - [flex](6) [Microsoft] - [iis](3) [Oracle] - [java] - struts1(7) JavaScript(4) linux(2) [Oracle] - [mysql](4) [Oracle] - [oracle](33) [Microsoft] - [silverlight](3) [Sybase] - [pb](25) [Sybase] - [pb] - 自定义实用函数(3) [Sybase] - [pb] -web(6) [Apache] - [php](5) [Sybase] - [Sql Anywhere](0) [Microsoft] - [sqlserver](114) [Microsoft] - [sqlserver] - 管理(2) [Microsoft] - [sqlserver]-tree(0) [Microsoft] - [sqlserver] -字符串(2) [Microsoft] - [sqlserver]-行列转换(1) [Microsoft] - [vc](0) web开发(20) 转帖(12) [Oracle] - [java](21) [IBM] - [eclipse](4) [Microsoft] - [vba](4) english(1) java(1) spring(1) tools(2) 文章存档 2013年08月(2)2013年07月(1)2013年05月(1)2013年04月(2)2013年03月(1)2013年01月(1)2012年12月(5)2012年11月(3)2012年10月(1)2012年06月(1)2012年05月(6)2012年03月(15)2012年01月(11)2011年12月(4)2011年11月(27)2011年10月(7)2011年09月(5)2011年07月(14)2011年06月(7)2011年05月(3)2011年04月(19)2011年03月(6)2011年02月(2)2011年01月(2)2010年12月(1)2010年11月(1)2010年08月(16)2010年07月(87)2010年06月(54)2010年05月(1)2010年04月(2)2010年02月(3)2010年01月(5)2009年11月(5)2009年10月(2)2009年08月(4)2009年07月(12) 阅读排行 [sql server] 行转列问题总结1 - 行转列 (33876) 在Office2003版本下安装O2007Cnv.exe来打开Docx、xlsb、xlsx文件!(26575) 数据库置疑问题解决(9878) plsql之存储过程的调用和执行(9337) 领航致远_李腾飞老师javascript_html_css视频教程(8496) ASP连接sql server实例解析(7578) [sql server] [windows2003] 解决1433端口无法打开的问题 (6679) iis错误Server Application Error的解决方法(附修复工具下载)(6520) sql server 2005 连接与登陆失败问题(6435) [win7] window 7 home basic - administrator帐号的激活(6052) 评论排行 SQL Server 中树形表数据的处理总结(15) [sql server] 刚装完的sql server 2000,看看在你的机器里干了什么,2000的安全性令人担忧(13) [sql server] 行转列问题总结1 - 行转列 (12) [sql server] sql server 2005 外围应用配置器错误 - 计算机 localhost 在网络上不存在,或无法远程配置该计算机(12) [sql server] Microsoft SQL Server SA弱口令攻防实战(7) 通过 Visual Studio 对 SQL Server 中的存储过程设置断点并进入存储过程对其进行调试(6) pb11.5 web开发 - webservice之proxy的创建(5) sql server 2005 连接与登陆失败问题(5) 实例讲解连接sqlserver2000与2005 - sqljdbc.jar 驱动(4) iis错误Server Application Error的解决方法(附修复工具下载)(4) 推荐文章 最新评论 pb11.5 web开发 - 安装详解 PaulPaul: 一直没写过WEB下的应用程序,这有启动意义,谢谢了。 SQL2000中创建作业(定时查询,更新) QingKong999: 好东西就好分享 [sql server] sql server 2005 外围应用配置器错误 - 计算机 localhost 在网络上不存在,或无法远程配置该计算机 c13726798071: 不行啊 大哥 目录上有那文件了已经 pb中用mymail来进行收发邮件-实例与经验谈 u012570183: 可否发个dll给我!谢谢geyonglong@hotmail.com Spring的DataAccessException bruce2922: 感谢分享! ASP连接sql server实例解析 iamDVD: 没有看明白啊!为什么我按你说的去做人物,没有效果。显示404错误;我的操作:1、在wwwroot下新... [sql server] sql server 链接 MySql 实测经过 aier520: 很实用,还没有得试,过几天试试 从所有表及所有库中搜索关键字 zhouxue12366: 我想再探讨下,这样查询出去的数据怎样封装一个实体到页面呢?难道几百张表要用的字段都定义为一个对象?求... WebService之WSDL pmuuu: 很好很强大... iis错误Server Application Error的解决方法(附修复工具下载) u011802384: 问题解决了,谢谢