我有窗口 - 带有dw对象 - 当我打开这个窗口时,我检索数据窗口中的所有记录(dw_1.retrieve()
)
当用户想要搜索特定记录时,我将他输入的条件放入有效表达式中{ls_filter
)
然后
dw_1.setfilter(ls_filter)
dw_1.filter()
当服务器在本地网络上时,我的应用程序正常工作。
现在需要将服务器放在网络(云端)上,因此在打开事件中我无法检索所有行,因为检索所有行需要大约五分钟(非常长的时间段)。
所以在dw_1
的sql synatx中我添加了top 100
(在select之后)使得dw只能检索最后100行
我的问题是:如果用户想要搜索特定记录,这是否意味着我必须检索所有要搜索的行,因此需要很长时间才能加载所有行?
这是对的吗?还是有其他解决方案吗?怎么样?
答案 0 :(得分:1)
不要使用过滤器。相反,您需要使用where
子句在sql查询中添加检索参数。现在,无论何时需要搜索特定记录,只需使用
从菜单design
添加检索参数 - > retrieval arguments
假设您添加了检索参数过滤器varchar (100)
您的查询应该是:
Select top 100 * from tablename where (:filter is null and 1=1)
或
(columnxyz like :filter)
在检索时,open()
窗口传递null
字符串。
String is_filter; // instance variable
Setnull(is_filter);
Dw_1.retrieve (is_filter)
仅检索已过滤的内容:
is_filter=sle_control.text;
Dw_1.retrieve (is_filter)
您还可以访问此博客:
http://bishtpowerbuilder.blogspot.in/2016/10/4-datawindows-strength-of-powerbuilder_25.html?m=1
答案 1 :(得分:0)
正确的做法是在dw中应用where而不使用过滤器。减少记录的时间。