jusomine 发表于 2015-12-11 00:01:51

如何让Tab各选项卡同步同一条数据?

本帖最后由 jusomine 于 2015-12-15 00:46 编辑

PB中协调多数据窗口数据操纵的一种解决方法

1、问题的提出
数据窗口是Power Builder中检索、表现和操纵数据的对象。如果一个数据表的列不多,用单数据窗口操纵数据很易实现,但在实际应用中,数据表的列数动辄几十,甚至上百也并不少见,这时用单数据窗口滚动显然不方便,一个自然的想法是采用TAB控件和TAB页,在每个TAB页上放置一个数据窗口控件,每个数据窗口控件分门别类操纵数据表的列,但随之而来的问题是如何协调分布在这些数据窗口中录入或修改数据的存储,针对每个数据窗口发布一个UPDATE()函数的调用不可行。我们在实际开发中经过探索,增加一个后台的数据窗口做中介,解决了多数据窗口操纵数据的问题。

2、协调多数据窗口数据操纵的一种解决方法
基本思路是:在进行数据操纵的数据窗口控件之外,另外放置一个数据窗口控件,设置其不可见,并设其数据窗口对象为一个选择了数据表中所有列的数据窗口,其他数据窗口控件中录入或修改的数据实时地传送过来,对该控件的数据进行更新操作即可。
不失一般性,下面以POWERBUILDER自带数据库psDemoDB.db中的customer表的数据录入为例来说明。
Customer表有"id","fname","lname","address","city","state","zip","phone","company"九个列,其中"id"为integer类型,其余均为char类型。
(1)创建数据窗口
建立三个数据窗口d_1、d_2、d_3,数据窗口d_1选"id","fname","lname"三列,d_2中选"address","city","state"三列,d_3选"zip",""phone","company_name"三列。再建立数据窗口d_4,选中数据表中的所有列。
(2)建TAB控件和TAB页
建立一个TAB控件tab_1,建立三个TAB页tabpage_1、tabpage_2、tabpage_3。
(3)建数据窗口控件
在(2)中建的三个TAB页中分别放置dw_1、dw_2、dw_3三个数据窗口控件,设其数据窗口对象分别为d_1、d_2、d_3。
另外,在窗口中放置一个数据窗口控件dw_4,不选其"visible"属性.
(4)编写代码
在tabb1.tab_page_1.dw_1的editchanged事件中编写代码如下:
//代码由此开始
//设置变量,id_value存放数据表中id列的值
int i_m,i_n,id_value
string str_fname,str_lname
//取dw_1当前的行数
i_m=tab_1.tabpage_1.dw_1.getrow()
//取dw_4当前的行数
i_n=dw_4.getrow()

//tab_1.tabpage_1.dw_1及dw_4接收浮在数据窗口控件表面的数据
tab_1.tabpage_1.dw_1.accepttext()
dw_4.accepttext()

//取dw_1中的"id"列的值给变量id_value
id_value=tab_1.tabpage_1.dw_1.getitemnumber(i_m,"id")
//将变量id_value的值赋给dw_4中"id"列
dw_4.setitem(i_n,"id",id_value)

//取dw_1中的"fname"列的值给变量str_fname
str_fname=tab_1.tabpage_1.dw_1.getitemstring(i_m,"fname")
//将变量str_fname的值赋给dw_4中"fname"列
dw_4.setitem(i_n,"fname",str_fname)

//取dw_1中的"lname"列的值给变量str_lname
str_lname=tab_1.tabpage_1.dw_1.getitemstring(i_m,"lname")
//将变量str_lname的值赋给dw_4中"lname"列
dw_4.setitem(i_n,"lname",str_lname)
//代码到此结束

tab1.tab_page_2.dw_2、tab1.tab_page_3.dw_3的editchanged事件代码可比照tab1.tab_page_1.dw_1的editchanged事件代码编写,从略。
程序在PB65和PB7中调试通过,程序运行时,无论新增数据,还是对dw_1、dw_2、dw_3中的数据列进行修改,数据都实时地传送给dw_4,只需对dw_4进行保存或更新操作,从而解决了多数据窗口数据操纵的协调问题。
如上文章中的,Customer表中的9个字段"id","fname","lname","address","city","state","zip","phone","company",分割为三部分在Tab的三个选项卡的数据窗口中分别显示。看起来似乎很简单,但是写得不是很详尽,在实际操作中,三个选项卡中的数据窗口无法同步同时的显示一条数据,新增和修改数据也总是不同步,比喻tabpage1显示第9条数据的第一部分字段时候,切换到tabpage2、tabpage3无法同步同时显示第9条数据的其余字段内容。这个问题困扰好久了....本人刚开始接触PB,也算基本入门了吧,但有很多问题无法得到解惑。都说PB没落了,也许没人对这个问题感兴趣和关注,但还是来碰碰运气,希望哪个大侠有空指点一二....

jusomine 发表于 2015-12-15 12:20:10

本帖最后由 jusomine 于 2015-12-15 12:22 编辑

简明一下问题:
假如数据库名为Xdb字段为ID,F1,F2,F3,F4,F5,F6,F7,F8,F9。其中ID为自增、主键。
将数据库所有字段分成三部分:a(ID、F1、F2),b(F3、F4、F5),c(F6、F7、F8、F9)
对应的dataobject分别为do_a,do_b,do_c
对应的datawindow分别为dw_a,dw_b,dw_c。均为Freedom样式。
分别嵌入Tab的tabpage1,tabpage2,tabpage3中。
另外所有字段对应do_all,dw_all。
数据库中已经预先添加3条数据。

然后希望能实现:
1、新增数据:点“增加”按钮,在tabpage1的数据录入界面ID自增为4,F1、F2为空白行等待录入数据;录入数据后,点“保存”或“更新”按钮,将新增ID、F1、F2内容保存到第4条数据。然后切换到tabpage2,tabpage3时,也是同样新增第4条待录入数据状态,录入数据后点“保存”或“更新”按钮,录入的字段数据依次保存到第4条数据。
2、查看数据:点“首条”“下一条”“上一条”“末条”等能切换自如,各选项卡同步显示的是同一条数据的不同部分。

即想达到如同在一个界面窗口操作数据一样的效果。

现在最大的问题是各选项卡不同步,按主贴中文章所介绍的方法能录入数据,但是总是难以同步。希望老师们空的话点拨一二.....不甚感谢






wysyzwy 发表于 2015-12-24 21:53:29

用sharedata

swimchen 发表于 2023-9-25 06:38:49

我一般不用ShareData,而是用RowsCopy(),其实所有数据窗口的数据源字段一致就可以实现
页: [1]
查看完整版本: 如何让Tab各选项卡同步同一条数据?

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com