检索前100,然后搜索所有记录

时间:2016-11-18 09:31:40

标签: sql-server powerbuilder

我有窗口 - 带有dw对象 - 当我打开这个窗口时,我检索数据窗口中的所有记录(dw_1.retrieve()

当用户想要搜索特定记录时,我将他输入的条件放入有效表达式中{ls_filter

然后

dw_1.setfilter(ls_filter)
dw_1.filter()

当服务器在本地网络上时,我的应用程序正常工作。

现在需要将服务器放在网络(云端)上,因此在打开事件中我无法检索所有行,因为检索所有行需要大约五分钟(非常长的时间段)。

所以在dw_1的sql synatx中我添加了top 100(在select之后)使得dw只能检索最后100行

我的问题是:如果用户想要搜索特定记录,这是否意味着我必须检索所有要搜索的行,因此需要很长时间才能加载所有行?

这是对的吗?还是有其他解决方案吗?怎么样?

2 个答案:

答案 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而不使用过滤器。减少记录的时间。