求助,pfc_w_filtersimple过滤数据异常,百思不得解

自由之翼Sai 2019-06-04 04:41:51
背景:PB升级,PB6到PB2017
问题:
调用PFC库中的pfcdwsrv.pbl下的pfc_w_filtersimple 弹框来过滤数据窗口中的数据,发现该弹框pfc_default() 事件中的 li_rc = lds_test.SetFilter(ls_testfilter) 在PB6环境下验证过滤条件返回值为 1 测试成功,但是在PB2017环境下相同的 ls_testfilter 过滤条件返回值为 -1 测试失败,导致进入异常分支不能实现过滤数据功能

一天了都没搞明白为什么,请这方面的大神指点一二 !!
...全文
321 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由之翼Sai 2019-06-06
  • 打赏
  • 举报
回复
引用 17 楼 aolixiaox 的回复:
你的DW是 This.dw_ichiran.Create(dw_Syntax,error_create) 动态生成的。 ds 也一样Create(dw_Syntax,error_create) 生成一次,不就好了?
你说的ds 指的应该是 lds_test ,它在PFC基类里被赋值过了 lds_test= create n_ds ,而且dw_Syntax这个要怎么传过来我也不明白,工期紧张所以还是在下面加个判断把-1变成1吧
aolixiaox 2019-06-06
  • 打赏
  • 举报
回复
你的DW是 This.dw_ichiran.Create(dw_Syntax,error_create) 动态生成的。 ds 也一样Create(dw_Syntax,error_create) 生成一次,不就好了?
自由之翼Sai 2019-06-06
  • 打赏
  • 举报
回复
引用 14 楼 aolixiaox 的回复:
datastroe 一样可以用Create,就和 dw_ichiran 一样生成一次。
没明白你的意思
自由之翼Sai 2019-06-06
  • 打赏
  • 举报
回复
引用 11 楼 qq_1919561306 的回复:
加我的 QQ看看
我新建了一个数据窗口,查询的是 This.dw_ichiran.Create(dw_Syntax,error_create) 中,dw_Syntax 的SQL 句中的表, 然后关联到窗口控件的dataobject中,再一次运行就好了,所以就是 PB6 的时候默认值是 1 但是到PB2017默认值变成了 -1 导致的。奇怪的是如果我新建的DW查询的是 A 表,dw_Syntax SQL 句查询的是 B 表,这种情况下虽然 lds_test 有dataobject 属性,但返回值还会是 -1
aolixiaox 2019-06-06
  • 打赏
  • 举报
回复
datastroe 一样可以用Create,就和 dw_ichiran 一样生成一次。
自由之翼Sai 2019-06-06
  • 打赏
  • 举报
回复
引用 12 楼 aolixiaox 的回复:
那就是这个问题,就是还没有DW或DS对象,你就进行了setfliter,返回 -1 .低版本的这种情况返回1,造成的差异。
给dw_ichiran 赋值是通过 This.dw_ichiran.Create(dw_Syntax,error_create) 实现的,我查了一下这种叫动态数据窗口,dw_Syntax 是一个SQL句。lds_test 中的dataobject 就是来自于 dw_ichiran 这个窗口控件的 dataobject ,但是dw_ichiran 的数据窗口是动态的所以 dw_ichiran 就没有dataobject这个属性,那有没有办法可以在Create数据窗口的时候给dw_ichiran 追加一个相对应的dataobject呢? 如果没有这种方法的话,我准备 在 li_rc = lds_test.SetFilter(ls_testfilter) 这句话之后,加个判断如果 dataobject为空返回值是 -1 ,就把 li_rc 修改 为 1
aolixiaox 2019-06-05
  • 打赏
  • 举报
回复
那就是这个问题,就是还没有DW或DS对象,你就进行了setfliter,返回 -1 .低版本的这种情况返回1,造成的差异。
qq_1919561306 2019-06-05
  • 打赏
  • 举报
回复
加我的 QQ看看
自由之翼Sai 2019-06-05
  • 打赏
  • 举报
回复
引用 9 楼 qq_1919561306 的回复:
应该是你的程序的问题,pfc基类没问题
我在官网查到了这样一句话 : 在PowerBuilder 8.0.2及更高版本中,没有为DataWindow控件或DataStore分配DataWindow对象时返回的值已针对表2中列出的方法进行了标准化。其中一些返回值与PowerBuilder 7中返回的值不同,早期版本。SetFilter包含在表中,但其返回值在PowerBuilder 8.0.4中从1更改为-1,而不是PowerBuilder 8.0.2。 8.0.4版本之后没有为DataWindow控件或DataStore分配DataWindow对象时SetFilter返回的值从 1 变成了 -1 ,我打断点看了下执行li_rc = lds_test.SetFilter(ls_testfilter) 这句话时 lds_test 里的dataobject属性是空字符串,这是不是意味着没有给 lds_test 这个 DataStore 分配 DataWindow 对象呢?基类代码如下图
qq_1919561306 2019-06-05
  • 打赏
  • 举报
回复
应该是你的程序的问题,pfc基类没问题
自由之翼Sai 2019-06-04
  • 打赏
  • 举报
回复
引用 7 楼 aolixiaox 的回复:
你可以把 ls_testfilter 的值,字段的类型,发一下。
行号 在数据库里是number类型,用SQL把检索出来的数据放到数据窗口中用PFC自带的这个弹框过滤数据 ls_testfilter 就是接收过滤条件的变量是 String类型
aolixiaox 2019-06-04
  • 打赏
  • 举报
回复
你可以把 ls_testfilter 的值,字段的类型,发一下。
自由之翼Sai 2019-06-04
  • 打赏
  • 举报
回复
引用 5 楼 aolixiaox 的回复:
是getrow(), 还是字段?
是数据窗口中的一列,也就是字段名,我又试了一下 '行号' = 12 这种情况,结果还是一样
aolixiaox 2019-06-04
  • 打赏
  • 举报
回复
是getrow(), 还是字段?
自由之翼Sai 2019-06-04
  • 打赏
  • 举报
回复
引用 3 楼 aolixiaox 的回复:
你可以发出了看看,不是一样就一定没有问题。 比如数值字段,有些平台a='1' 和 a=1 都可以正常运行,有的平台a='1' 是会报错的,也就是所谓的容错。
过滤条件是 行号 = 12 ,在PB6 就是 行号 = 12,PB2017下使用 行号 = 12 会进异常提示条件无效,然后我刚才试着修改成 行号 = '12' 结果还是错误
aolixiaox 2019-06-04
  • 打赏
  • 举报
回复
你可以发出了看看,不是一样就一定没有问题。 比如数值字段,有些平台a='1' 和 a=1 都可以正常运行,有的平台a='1' 是会报错的,也就是所谓的容错。
自由之翼Sai 2019-06-04
  • 打赏
  • 举报
回复
引用 1 楼 aolixiaox 的回复:
把ls_testfilter messagebox显示出来,分析一下过滤条件, 不同的平台代码容错会有出入的。
打断点在控制台看了,PB6 PB2017的过滤条件都是一致的,所以很纳闷
aolixiaox 2019-06-04
  • 打赏
  • 举报
回复
把ls_testfilter messagebox显示出来,分析一下过滤条件, 不同的平台代码容错会有出入的。

609

社区成员

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

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