回 帖 发 新 帖 刷新版面

主题:希望热心的powerbuilder高手给予解答!!

希望热心的powerbuilder高手给予解答!!

我在电脑上反复试验,结果发现一个奇怪的问题:

我要操作的数据库名为unit_x ,数据库内有一定量的数据,

该数据库有四个字段分别为unit_no char(8), unit_name char(20),numbers double , qianyuan double.

按我的想法,我进行了如下的操作:

1、将此数据库在pb内做了一个数据窗口dw_unit

2、新建立了一个窗口 w_main,编写如下脚本:

connect using sqlca;

dw_1.settransobject(sqlca)

dw_1.retrieve()

3、建立数据窗口控件dw_1与数据窗口dw_unit的关联

4、运行程序后,数据库中的数据可以正确显示。这一点可以说明,数据库联接正确,并且可以从中通过dw_1.retrieve()
   检索出数据并正确显示在数据库窗口中。


5、在窗口 w_main中,新建一个”command button",在text后注明“测试”,编写clicked脚本如下:

这段脚本的意思是,将数据库unit_x中的字段numbers中不等于5的记录过滤掉,然后再将移到过滤缓冲区中的第5条记录”unit_name"字段上对应的值显示

出来,这样我就可以有效了解检验过滤的情况了。

string abc,xyz

abc="numbers=5"

dw_1.setfilter(abc)

dw_1.filter()

dw_1.retrieve() //可能会有问题

xyz=dw_1.getitemstring(5,"unit_name",filter!,true)

sle_1.text=xyz

6、运行情况显示,显示在sle_1.text文本框中的值,并不是移到过滤缓冲区中的第5条记录”unit_name"字段所对应的值显示,却成了倒数第5条记录”unit_name"字段上对应的值。

7、我怀疑问题出在dw_1.retrieve() 这一句,于是将这一句屏蔽,运行后,单击1次“测试”,显示在sle_1.text文本框中的值,是移到过滤缓冲区中的第5条记录”unit_name"字段所对应的值显示,再单击1次,显示在sle_1.text文本框中的值,是移到过滤缓冲区中的倒数第5条记录”unit_name"字段所对应的值。最后的总结,只要单击的是第奇数次显示的情况与第一次相同,单击的是第偶数次显示的情况与第二次相同


对此我百思不得其的问题!

如果你有时间的话,希望能帮我回答这一个问题,将不胜感激!!!

xgjsbx@126.com   qq:24532713


回复列表 (共6个回复)

沙发

dw_1.filter()

dw_1.retrieve() //可能会有问题
这里出了问题,

板凳

今天晚上没时间了,今天晚上带回去帮你看看,明天再回复!

3 楼

还是粗略看了下,感觉有这些问题:

1.过滤不等于5的记录的语法为dw_1.setfilter("number <> 5");
2.setfilter()定义数据窗口的过滤条件,Filter()函数使用数据窗口当前的过滤条件过滤数据窗口中的数据,函数执行之后,数据窗口中只显示满足过滤条件的数据.从数据缓冲区方面来说,dw_1.retrieve()更新的是主缓冲区的数据,而此时主缓冲区的数据即为dw_.filter()后的数据,即可写可不写.

4 楼

经过试验,我发现dw_1.retrieve在dw_1.setfilter()之后,完全可以代替dw_filter,而若提前执行dw_1.retrieve()则后面只有dw_1.filter()即可。即
dw_1.setfilter(abc)
dw_1.retrieve()
或:
dw_1.retrieve()
dw_1.setfilter(abc)
dw_1.filter()

均不会出错!

5 楼

向四楼的请教一下:
dw_1.setfilter(abc)
dw_1.retrieve()
这种用法中
按道理讲
dw_1.retrieve()是更新primaryBuffer中的数据
而dw_1.setfilter(abc)是更新filterBuffer中的数据
我自认为你把它们倒过来用
而且没有使用dw_1.filter()
这样在filterBuffer中就不会有数据呀,怎么可能取到呢
他是要取filterBuffer中的数据呀

6 楼

我顺便再问一下:
我在使用 xyz=dw_1.getitemstring(5,"unit_name",filter!,true)
把其中的列改为我自己的表中对应的死了 
如下:  xyz=dw_1.getitemstring(5,"name",filter!,true)
后面的代码和你的一样
为什么我单击"测试"按钮时,它提示说"无效的行/列类型"呢

我来回复

您尚未登录,请登录后再回复。点此登录或注册