pb中在一个报表中插入另外一个报表,像对这个子报表进行数据操作,但是怎么获得这个子报表呢

xlb14 2011-08-25 01:57:18
在pb一个报表dw_10中插入一个报表dw_1,我想通过对dw_1进行where条件来显示数据出来,但是我如何获得dw_1这个对象,对它进行数据操作呢
以下写法请指点或者有更好的方法请提议,谢谢
string ls_e4,ls_e5,ls_e3
ls_e3="sono='"+sono+"' and soseq='"+soseq+"'"
datastore ids_print
dataWindowChild ldw_child
ids_print=create datastore
ids_print.dataobject = 'dw_10'
ids_print.settransobject(sqlca)
dw_10.modify( "datawindow.processing = '5 ' ")
ids_print.getChild( "dw_1",ldw_child)
ldw_child.settransobject(sqlca)
ls_e4= ldw_child.DataWindow.Table.Select
long ll_pos6
ll_pos6 = pos(ls_e4 , " where ")
if ll_pos6>0 then
ls_e4 = left(ls_e4 , ll_pos6 - 1)
end if
ls_e5=ls_e4+" where " +ls_e3
ldw_child.Object.DataWindow.Table.Select=ls_e5
ldw_child.retrieve( )
...全文
531 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlb14 2011-08-25
  • 打赏
  • 举报
回复
谢谢yyoinge一个下午的热心回答,我自己用函数来抓取的方法终于可以实现了。谢谢你的帮助
xlb14 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yyoinge 的回复:]
你得让dw1中具有与dw_10的排序字段相同的字段,并且得让它们的行数一致
假设左边dw_10的sql语句为:select a, b from tb1 order by a
右边dw_1的sql语句为:select c,d from tb2 order by c
这样一来两边很难对得上的

你应该修改dw_1的语句为
select tb1.a, tb2.c, tb2.d from tb……
[/Quote]
谢谢你提供的方法,我现在正试验用函数来抓取dw_1中所要的值来进行对比
yyoinge 2011-08-25
  • 打赏
  • 举报
回复
你得让dw1中具有与dw_10的排序字段相同的字段,并且得让它们的行数一致
假设左边dw_10的sql语句为:select a, b from tb1 order by a
右边dw_1的sql语句为:select c,d from tb2 order by c
这样一来两边很难对得上的

你应该修改dw_1的语句为
select tb1.a, tb2.c, tb2.d from tb1
left join tb2
on tb1.a = tb2.a
order by tb1.a
xlb14 2011-08-25
  • 打赏
  • 举报
回复
报表出来如上,只有第一笔(第一行是dw_10的第一笔数据,第二行是dw_1(ls_e3那个条件查询出来的数据))有对比成功,但是第二三---下去就没有了。以第二笔为例(第一行是dw_10的第二笔数据,第二行是是dw_1(ls_e3那个条件查询出来的数据),但是第三行,第四行下去就是dw_1的数据。而没有单纯dw_10的第二笔数据和dw_1(ls_e3那个条件查询出来的数据))进行对比。dw_10第三笔数据也是要和dw_1(ls_e3那个条件查询出来的数据))进行对比.依次类推dw_10的所有行都只和dw_1(ls_e3那个条件查询出来的数据))进行对比.但是除了dw_10第一笔对比成功外,其他行都和dw_10的第二笔那样,没有成功
xlb14 2011-08-25
  • 打赏
  • 举报
回复
訂單核檢表 頁次: 1 / 8 -42o

訂單日期: 20091223
rec# 客戶編號 訂單編號 客戶訂單 件號描述 訂單數量 單位 計價單價 單位 訂單交期 備註說明
1 芊茂拉鏈 芊茂拉鏈 SO09120568 0001 PO0722 G10S-M3CA-3RCB-3D-M31A- - - -RAW 10,000.00 PCS 421.0000 TP 20091225
芊茂拉鏈 芊茂拉鏈 SO09120568 0001 PO0722 G10S-M3CA-3RCB-3D-M31A- - - -RAW 10,000.00 PCS 421.0000 TP 20091225
2 芊茂拉鏈 芊茂拉鏈 SO09120569 0001 PO0722 G10S-M5CS-0R5V-5D-5TE- - - -RAW 10,000.00 PCS 517.0000 TP 20091225
芊茂拉鏈 芊茂拉鏈 SO09120568 0001 PO0722 G10S-M3CA-3RCB-3D-M31A-SCIL- - -RAW 10,000.00 PCS 421.0000 TP 20091225
芊茂拉鏈 芊茂拉鏈 SO09120569 0001 PO0722 G10S-M5CS-0R5V-5D-5T-SCIL- - -RAW 10,000.00 PCS 517.0000 TP 20091225
頂行貿易 頂行貿易 SO09120719 0001 RU12007-1 G10S-I31LCA-C-I3F9A-I31LF00- -R-N-RAW 100,000.00 PCS 500.0000 TP 20100120
華碩拉鏈 華碩拉鏈 SO10030236 0001 99-23240B G10S-N71B-60ER-7A-RT7CA-箭尾- - -RAW 10,000.00 PCS 1,313.0000 TP 20100315
xlb14 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yyoinge 的回复:]
dw_10.modify( "datawindow.processing = '5' ")
5后面的空格去掉
[/Quote]
string ls_e4,ls_e5,ls_e3
ls_e3="sono='"+sono+"' and soseq='"+soseq+"'"
datastore ids_print
dataWindowChild ldw_child
dw_10.modify( "datawindow.processing = '5'")
long ll_ret,cc
ll_ret =dw_10.getChild( "dw_1",ldw_child)
if ll_ret = -1 then //失败
messagebox('error','Not A Datawindow')
end if
ldw_child.settransobject(sqlca)
ls_e3 = "select * from pb_42o_3 where sono='"+sono+"' and soseq='"+soseq+"' "
cc=ldw_child.setsqlselect(ls_e3)
if cc = -1 then //失败
messagebox('error','Not success')
end if
ldw_child.retrieve( )
谢谢你,果然可以获取dw_1对象,cc那边也返回1说明也可以执行setsqlselect。但是我的问题还是没有解决,我报表要实现目的dw_10里面的每笔数据跟dw_1中ls_e3查询出来的这笔进行对比。不能贴图很难说明我要的意思,不好意思
yyoinge 2011-08-25
  • 打赏
  • 举报
回复
dw_10.modify( "datawindow.processing = '5' ")
5后面的空格去掉
xlb14 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yyoinge 的回复:]
引用 6 楼 xlb14 的回复:
用get_child是否只能报表类型是composite才可以的,我报表类型是用Tabular



应该是的,不过
dw_10.modify( "datawindow.processing = '5 ' ")
之后,应该就可以取得到了
[/Quote]
string ls_e4,ls_e5,ls_e3
datastore ids_print
dataWindowChild ldw_child
dw_10.modify( "datawindow.processing = '5 ' ")
long ll_ret
ll_ret =dw_10.getChild( "dw_1",ldw_child)
if ll_ret = -1 then //失败
messagebox('error','Not A Datawindow')
end if
ls_e3 = "select * from pb_42o_3 where sono='"+sono+"' and soseq='"+soseq+"' "
ldw_child.setsqlselect(ls_e3)
ldw_child.retrieve( )
ls_e4= ldw_child.getsqlselect( )
提示'NOt A Datawindow',说明获取不到dw_1对象
yyoinge 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xlb14 的回复:]
用get_child是否只能报表类型是composite才可以的,我报表类型是用Tabular
[/Quote]


应该是的,不过
dw_10.modify( "datawindow.processing = '5 ' ")
之后,应该就可以取得到了
xlb14 2011-08-25
  • 打赏
  • 举报
回复
string ls_e4,ls_e5,ls_e3
datastore ids_print
dataWindowChild ldw_child
dw_10.modify( "datawindow.processing = '5 ' ")
long ll_ret
ll_ret =dw_10.getChild( "dw_1",ldw_child)
if ll_ret = -1 then //失败
messagebox('error','Not A Datawindow')
end if
ls_e3 = "select * from pb_42o_3 where sono='"+sono+"' and soseq='"+soseq+"' "
ldw_child.setsqlselect(ls_e3)
ldw_child.retrieve( )
ls_e4= ldw_child.getsqlselect( )
提示'NOt A Datawindow',说明获取不到dw_1对象
xlb14 2011-08-25
  • 打赏
  • 举报
回复
原先dw_1没有写select。ldw_child.setsqlselect(ls_e3)是第一次对dw_1进行select
xlb14 2011-08-25
  • 打赏
  • 举报
回复
用get_child是否只能报表类型是composite才可以的,我报表类型是用Tabular
yyoinge 2011-08-25
  • 打赏
  • 举报
回复
看看ldw_child.setsqlselect(ls_e3)函数的返回值,如果为-1表示函数执行失败,不会替换dw中原先的sql语句。

原dw中用的也是 select * from 吗?

你得确保新的sql语句, ls_e3 中的select 列表与原sql语句的select列表中的字段数是相同的,并且各个字段的类型都是一致的
xlb14 2011-08-25
  • 打赏
  • 举报
回复
string ls_e4,ls_e5,ls_e3
ls_e3="sono='"+sono+"' and soseq='"+soseq+"'"
datastore ids_print
dataWindowChild ldw_child
dw_10.modify( "datawindow.processing = '5 ' ")
dw_10.getChild( "dw_1",ldw_child)
ldw_child.settransobject(sqlca)
ls_e4= ldw_child.getsqlselect( )
ls_e3 = "select * from pb_42o_3 where sono='"+sono+"' and soseq='"+soseq+"' "
ldw_child.setsqlselect(ls_e3)
ldw_child.retrieve( )
用这个方法,还是dw_1中所有数据都检索出来,不会根据那个ls_e3的条件检索出来
yyoinge 2011-08-25
  • 打赏
  • 举报
回复
用ldw_child.getsqlselect()

ldw_child.setsqlselect()
xlb14 2011-08-25
  • 打赏
  • 举报
回复
ldw_child没有datawindow的属性,在pb会提示错误的
yyoinge 2011-08-25
  • 打赏
  • 举报
回复
string ls_e4,ls_e5,ls_e3
ls_e3="sono='"+sono+"' and soseq='"+soseq+"'"
datastore ids_print
dataWindowChild ldw_child
dw_10.getChild( "dw_1",ldw_child)
ldw_child.settransobject(sqlca)
ls_e4= ldw_child.DataWindow.Table.Select
long ll_pos6
ll_pos6 = pos(ls_e4 , " where ")
if ll_pos6>0 then
ls_e4 = left(ls_e4 , ll_pos6 - 1)
end if
ls_e5=ls_e4+" where " +ls_e3
ldw_child.Object.DataWindow.Table.Select=ls_e5
ldw_child.retrieve( )

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧