用pb开发功能或报表时,数据窗口的retrieve函数自然不用多说,肯定会用到,但有时候可能会会用到
setfilter和filter两个方法来过滤数据
本人在retrieve后再用setfilter和filter时就遇到了这种情况,这个说来也简单,但找起问题来却很让人头疼,明明sql没问题或数据窗口可以检索出数据,但在程序执行时就出现一会有一会无的情况,以为是入参的问题,所以从datetime改为了date,又从date改为了string,依旧不行。
为什么会出现retrieve后再进行retrieve时会出现有数据的结果查询不出来了呢?
原来是retrieve后面有用setfilter和filter再进行过滤处理,我在retrieve前面再加一个setfilter和filter对应空条件的语句,再执行程序,就可以正常执行了。
即(红色字体为增加)
dw_1.setfilter("")
dw_1.filter()
dw_1.retrieve(入参)
dw_1.setfilter("过滤条件")
dw_1.filter()
所以我猜测,这是pb的机制问题,retrieve后面有用setfilter和filter之后,再进行retrieve时,setfilter的过滤条件依旧在缓存中,当retrieve完成后又执行了setfilter
或者是,当再此retrieve时,并不是真的再从数据库中retrieve,而是从缓存中retrieve,然后在执行了未清除的setfilter过滤
写此博文, 仅为记录,避免再次入坑,也希望对看到的你有用。