PB中两个数据窗口中的数据相关联,一一对应。
想在同一个窗口中放两个数据窗口,两个数据窗口分别显示不同但相关联的内容。如一个数据窗口显示资金预算系统中的“项目”表信息,另一个数据窗口显示财务系统中“科目”表信息,项目...
想在同一个窗口中放两个数据窗口,两个数据窗口分别显示不同但相关联的内容。如一个数据窗口显示资金预算系统中的“项目”表信息,另一个数据窗口显示财务系统中“科目”表信息,项目和科目是一一对应的。就是一个项目对应一个科目。通过编程实现两个数据窗口中“项目”和“科目”的这种对应关系,并存入另一张表中(同时含有项目和科目字段),该怎样编程实现呢?
展开
4个回答
展开全部
这个应该不难吧?
你的窗口上的两个数据窗口,虽然说项目和科目有对应,但是从两个数据窗口上看,应该是各自显示各自的数据吧?更像是一个基础数据的显示,对吧?
然后,你要左右各选择一行,通过一个按钮【对应】,来实现二者的对应并存储到后台表中,是这个意思么?
那就在对应这个按钮的点击事件中写代码就差不多了。
比如科目的数据窗口是dw_1,项目的数据窗口是dw_2
对应的点击事件:
if dw_1.GetRow() <= 0 then return //dw_1没有选择行
if dw_2.GetRow() <= 0 then return //dw_2没有选择行
string ls_acct, ls_project //定义变量
ls_acct = dw_1.object.acct_no[dw_1.GetRow()] //获取当前点击的科目值
ls_project = dw_2.object.project_no[dw_2.GetRow()]//获取当前点击的项目值
insert into 对应关系表(科目编号, 项目编号) values (:ls_acct, :ls_project); //插入表
if sqlca.sqlcode = 0 then //插入成功
commit; //提交确认
else
rollback; //插入失败,回滚事务
end if
这样你的对照关系就插入成功了,如果你的窗口上还有一个现实对应关系的数据窗口,在这之后直接做retrieve,就能刷新对应的关系在数据窗口显示了。
你的窗口上的两个数据窗口,虽然说项目和科目有对应,但是从两个数据窗口上看,应该是各自显示各自的数据吧?更像是一个基础数据的显示,对吧?
然后,你要左右各选择一行,通过一个按钮【对应】,来实现二者的对应并存储到后台表中,是这个意思么?
那就在对应这个按钮的点击事件中写代码就差不多了。
比如科目的数据窗口是dw_1,项目的数据窗口是dw_2
对应的点击事件:
if dw_1.GetRow() <= 0 then return //dw_1没有选择行
if dw_2.GetRow() <= 0 then return //dw_2没有选择行
string ls_acct, ls_project //定义变量
ls_acct = dw_1.object.acct_no[dw_1.GetRow()] //获取当前点击的科目值
ls_project = dw_2.object.project_no[dw_2.GetRow()]//获取当前点击的项目值
insert into 对应关系表(科目编号, 项目编号) values (:ls_acct, :ls_project); //插入表
if sqlca.sqlcode = 0 then //插入成功
commit; //提交确认
else
rollback; //插入失败,回滚事务
end if
这样你的对照关系就插入成功了,如果你的窗口上还有一个现实对应关系的数据窗口,在这之后直接做retrieve,就能刷新对应的关系在数据窗口显示了。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
zhishouxin 说的基本没错
不过如果你是新手的话,需要注意一点,他的语句写法需要将数据窗口的列的taborder都要设置为大于0,这样getrow()取的值才是对的
如果有的列不能设置taborder大于0的话
可以按照如下写法
在数据窗口的click事件里:
if row = 0 then return
在【对应】按钮里写
string ls_dw1_object,ls_dw2_object
int li_dw1,li_dw2
li_dw1 = dw_1.getselectedrow(0)
li_dw2 = dw_2.getselectedrow(0)
if li_dw1=0 then return //没有选中行,此处可以做个提示
if li_dw2 =0 then return //同上
ls_dw1_object = dw_1.getitemstring(li_dw1,'col_name')
ls_dw2_object= dw_1.getitemstring(li_dw2,'col_name')
取值过程就这样,插入数据按照 【zhishouxin 】 他说的做是可以的,
不过你说只能一一对应,这些约束的判断需要自己写语句在插入之前判断一下
不过如果你是新手的话,需要注意一点,他的语句写法需要将数据窗口的列的taborder都要设置为大于0,这样getrow()取的值才是对的
如果有的列不能设置taborder大于0的话
可以按照如下写法
在数据窗口的click事件里:
if row = 0 then return
在【对应】按钮里写
string ls_dw1_object,ls_dw2_object
int li_dw1,li_dw2
li_dw1 = dw_1.getselectedrow(0)
li_dw2 = dw_2.getselectedrow(0)
if li_dw1=0 then return //没有选中行,此处可以做个提示
if li_dw2 =0 then return //同上
ls_dw1_object = dw_1.getitemstring(li_dw1,'col_name')
ls_dw2_object= dw_1.getitemstring(li_dw2,'col_name')
取值过程就这样,插入数据按照 【zhishouxin 】 他说的做是可以的,
不过你说只能一一对应,这些约束的判断需要自己写语句在插入之前判断一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select id,count(*) from 表 having count(*)>1 GROUP BY ID
把一样的字段放面ID.这个位置就可以了.上面这一句是ID 一样其它不一样的.如果你要ID不一样就把ID去掉
select 除ID外其它,count(*) from 表 having count(*)>1 GROUP BY 除ID外其它 ss
把一样的字段放面ID.这个位置就可以了.上面这一句是ID 一样其它不一样的.如果你要ID不一样就把ID去掉
select 除ID外其它,count(*) from 表 having count(*)>1 GROUP BY 除ID外其它 ss
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
相关联的话可以用动态检索,dwname.setfilter() 控制筛选条件,动态检索2个窗口的数据,另外两个不同窗口UPDATE到同一张表? 建议你创建第三个数据窗口,根据前2个数据窗口动态的INSERT,SETITEM来修改第3个数据窗口的内容,然后UPDATE,用DATASTORE也行。
追问
比如可以实现“分别选中DW_1中的一行和DW_2中的一行,然后点击一个“设为对应”的按钮,自动在将这两行合并为一行并添加在一个叫做dygx(对应关系)的表中”。可以用另一个数据窗口显示dygx表的内容
追答
就是这样可以实现啊,在按钮单击事件里 用 getitem取得 DW_1和DW_2中的你需要合并的字段的值,如果不需要建第3个DW的话就直接用SQL语句INSERT了,如果需要展示,就建个DW_3,
dw_3.insertrow(0),然后setitem 把从DW_1和DW_2取来的值插入DW_3,然后执行DW_3的UPDATE就行了
参考资料: 自己
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询