前往Shuct.Net首页

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

关于PowerBuilder的搜索

PowerBuilder共享数据窗口的应用 课程首页 师资队伍 课程建设 课程信息 教学课件 教学录像 实践教学 在线学习 参考资源 在线交流   PowerBuilder共享数据窗口的应用 双击自动滚屏 发布者:xxgl 发布时间:2008-4-12 阅读:264次 与其它数据库前端工具相比,PowerBuilder显著的特点就是其数据窗口(DataWindow )技术,在编程方面有很强的技巧性。PowerBuild er为数据窗口提供丰富的函数,有些函数虽然不很常用,但在某些应用中恰当使用会收到很好的效果,本文所要讨论的数据窗口共享函数Sha reData()即为一例。使用共享数据窗口技术会减少编程工作量,在客户机/服务器模式下提高数据库的检索效率。   首先我们应理解共享数据窗口的概念,共享数据窗口的实现非常简单,只需一条Shar eData()。例如在Window对象上的两个数据窗口dw-p和dw-s,则可以用dw-p.ShareDat a(dw-s)实现二者的数据共 享,dw-p称为主数据窗口,而dw-s称为从数据窗口。从原理上讲,二者实际上所共享的是数据的缓冲区。缓冲区中的数据首先要从数据库中检索(通过数据窗口Retrieve()函数),而数据库的检索是一种较为" 昂贵"的操作,它会加重数据库和网络传输的负荷。在共享数据窗口情况下,只有主数据窗口检索数据,而从数据窗口通过共享获得数据,无须再检索数据库,下面列举的共享数据窗口应用都是基于这一原理的。   在下拉数据窗口中的应用   下拉数据窗口(DropDownDatawindow)作为一种编辑风格在数据窗口中有着广泛的应用,如果将数据窗口字段的编辑网络设为下拉数据窗口,则执行数据窗口的Retrieve()函数时,如果其所包含的下拉数据窗口为空(RowCount()=0),则自动为所含下拉数据窗口检索数据。如果一个数据窗口中包含多个下拉数据窗口字段,则在其每次打开关闭时(如常用的查询界面),所包含的下拉数据窗口都重复检索数据库。   考虑到包含下拉数据窗口的字段内容在一次应用中通常是不变的 ,所以多次检索数据库也是不必要的。这一问题可以通过共享数据窗口解决,具体做法是:先建立一个专用的窗口对象w-ddw完成预先检索任务,即在w-ddw上放置一个数据窗口dw-1,其字段为下拉数据窗口编辑风格,对应于后面用到的下拉数据窗口。w-ddw的open事件脚本 为:   //w-ddw's open event   dw-1.DataObject="dw-ddw"   dw-1.Retrieve()   其中dw-ddw是包含下拉数据窗口的数据窗口对象,这样为后面所要用到的下拉数据窗口检索到数据,后续的数据窗口包含下拉数据窗口时,下拉数据窗口可以共享这一检索结果而无须再对数据库检索。   考虑到对象的通用性,将w-ddw设计为一个专用对象,在其窗口级设计了一个函数wf-ddw-load(dw-app,col-src,col-dst),用于实现某一数据窗口(dw-app)中某字段所对应的下拉数据窗口的共享 。   //wf-ddw-load function   DataWindowsChild dwc-src,dwc-dst   dw-1.GetChild(col-src,dwc-src)   dw-app.GetChild(col-dst,dwc-dst)   if dwc-src.ShareData(dwc-dst)=-1 then    MessageBox("错误","数据共享错误!")   end if   如果考虑到某一字段内容可能更新,再设计一个字段更新函数:   wf-Update(col)   //wf-Update()function   DataWindowChild dwc   dw-1.GetChild(col,dwc)   dwc.SetTransObject(SQLCA)   dwc.Retrieve()   在应用的开始打开w-ddw,w-ddw设计为不可见的(Visible属性 为False),如果某一数据窗口(例如名为dw-app)中的下拉数据窗口共享w-ddw中的数据窗口数据,则可以在其所在的window的open事件编写脚本:   //This's open event   dw-app.SetTransObject(SQLCA)   w-ddw.wf-ddw-load(dw-app,'groups','groups')   dw-app.Retrieve()   由于下拉数据窗口通过共享已经装载数据,所以在以后的多次打开时,dw-app检索数据库时不会再为其检索,在应用的最后关闭w-dd w。   在查询式数据窗口中的应用   查询式数据窗口是一种非常有用的数据窗口模式(QueryMode),利用这一模式,可以以少量的代码实现高效的查询。   将一个数据窗口设置为查询模式,只需一条代码:   dw.Modify("DataWindow.QueryMode=yes")   如果一个数据窗口被设置为查询模式,则在其数据字段内输入的内容将成为查询条件,例如一个字段对应的表的列名分别为id和salar y,在id列输入">5",在salary列输入">3 00",当数据窗口进行Retriev e()时,发向数据库的SQL语句将成为:   SELECT id,salary...FROM emp WHERE id>5 and salary>300   现在的问题是:符合上述条件的查询结果又在同一数据窗口显示, 不能为最终用户使用,解决这一问题的方法就是建立两个数据窗口,一个用于输入组合条件,另一个(dw-2) 用于显示查询结果,只需一条语句即可:   dw-1.ShareData(dw-2)   如果再增加一些功能,许多复杂的组合式查询即可用这一简单的方法实现。   在数据窗口打印中的应用   数据窗口最简单的打印方法为:dw.print(),但是在实际应用中, 屏幕上用于显示的数据窗口通常与打印要求的格式不同,如有两个数据窗口,dw-1(用于显示)和dw-2(用于打印),使用数据窗口共享技术可以很简单地解决问题,否则就必须对dw-2进行数据库检索。   更复杂的情况是,一个屏幕本身就由两个数据窗口组成,例如dw- 1用于选择公司的某个部门,dw-2用于显示所选定部门的人员,如果要打印当前某一部门的查询结果,应如何处理呢?   PowerBuilder中的合成式数据窗口(Composite)是处理多数据窗口的有力工具,可以设计一个合成数据窗口dw-prt用于打印。dw-pr t所含两个数据窗口与dw-1和dw-2兼容。如果采用数据共享方法,dw -prt就不用执行带参数的Retrieve(parm),可以直接打印当前查询结果。下面说明具体的实现方法。   要实现数据共享,就必须能够引用合成数据窗口中所包含的两个数据窗口的名字,在数据窗口画板上双击内含Report对象,在出现的Re port Name中输入名字,假设分别为rpt -1和rpt-2,定义一个用户事 件ue-print,当触该事件时执行下列脚本:   //ue-print   //dw-1 contains department and dw-2 contains emp   DatawindowChild dwc-1,dwc-2   dw-prt.SetTransObject(SQLCA)   dw-prt.GetChild("rpt-1",dwc-1)   dw-prt.GetChild("rpt-2",dwc-2)   dw-1.ShareData(dwc-1)   dw-2.ShareData(dwc-2)   dw-prt.Print()   在图形显示中的应用   实际应用中为更直观表示数据的分布情况,经常同时使用数据窗口的列表形式和图形显示,例如一个屏幕中上面的数据窗口dw-1以列表形式表示数据,下面的数据窗口dw-g是dw-1的图形显示,如果脚本中包含:   dw-1.Sharedata(dw-g)   则每当修改dw-1中的数据时,dw-g所显示的图形马上变化,这种方法明显要比执行dw-1.Update()后再执行dw-g.Retrieve()要简捷 和快速。   综上所述,虽然数据窗口的共享技术只需ShareData()一条语句, 在某些情况下可使项目开发更迅速更可靠。以上只是作者在实际项目开发中总结的一般经验,仅供参考。 &nbsp 问题与交流 | 打印本页 | 关闭窗口 [111@2014-1-18 11:03:19] 白癜风治疗牛皮癣治疗尖锐湿疣皮炎症状白癜风症状北京白癜风医院北京牛皮癣医院治疗皮炎网页游戏白癜风早期症状白癜风症状白癜风症状图白癜风初期症状儿童白癜风早期症状北京白癜风医院治疗白癜风的偏方北京白癜风中医医院白癜风专科医院张家口白癜风医院石家庄白癜风医院天津白癜风医院郑州白癜风医院太原白癜风医院天津治疗白癜风最好的医院郑州白癜风医院成都白癜风医院北京白癜风专科医院北京白癜风专科医院保定白癜风医院治疗白癜风的药铁岭白癜风医院邢台白癜风医院白癜风偏方白癜风早期能治愈吗白癜风的治疗方法白癜风的早期症状白癜风偏方白癜风治疗白癜风治疗白癜风早期图片白癜风治疗北京军颐中医医院丹芪和血片驱白巴布期片复方木尼孜其颗粒复方驱虫斑鸠菊丸驱虫斑鸠菊注射液祛白酊白灵胶囊复方卡力孜然酊苏孜阿甫片乌龙散消白软膏银耳孢糖胶囊补骨脂注射液桃红清血丸苏孜阿甫片石家庄白癜风医院天津白癜风医院深圳白癜风医院上海白癜风医院南京白癜风医院广州白癜风医院北京白癜风医院北京白癜风专科医院治疗白癜风白癜风医院白癜风治疗白癜风专科医院北京治疗白癜风最好的医院牛皮癣症状郑州白癜风医院治疗白癜风治疗白癜风医院白癜风治疗天津白癜风医院沈阳白癜风医院白癜风怎么治石家庄白癜风医院白癜风治疗白癜风症状白癜风症状白癜风症状白癜风治疗白癜风症状白癜风治疗白癜风治疗白癜风症状白癜风治疗白癜风治疗 版权所有:河南经贸职业学院 信息管理系 © 2008 程序制作:姜晓峰 Email:jxf_welcome@126.com QQ: 89373694