以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  另类筛选技巧  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2159)

--  作者:狐狸爸爸
--  发布时间:2009/3/20 10:05:00
--  另类筛选技巧

另类筛选技巧


筛选只能通过表达进行的,例如:

Tables("订单").Filter = "[产品] = \'PD01\'"


菜单中的筛选命令,也只是将用户的操作转换为筛选表达式而已。

但是表达式的表述能力是有限的,现实中一些复杂的筛选,可能没有办法用表达式来实现,那么应该如何来满足这样的需要呢。

实现的思路是,在表中增加一个表达式列,但是不设置表达式,并将其隐藏起来,当我们进行一些复杂的逻辑筛选式,可以逐行进行计算,将结果保存在这个临时列中,至于这个表达式列的数据类型,可以根据需要选择,我个人觉得用整数型列较为合适。


示例


要从订单表中筛选出各月上旬的订单:


1、预先可以通过代码或者菜单命令,增加一个整数型的表达式列,列名随便取,这里姑且命名为"ms",并将其隐藏起来。


2、定义一个窗口按钮或者菜单按钮,用于筛选,Click事件代码为:


For Each
dr As DataRow In DataTables("订单").DataRows
    If
dr.IsNull("日期") Then
        dr(
"ms") = "0"
   
Else
        dr(
"ms") = dr("日期").Day
    End
If
Next
Tables(
"订单").Filter = "ms >= 1 and ms <=10"


这样单击次按钮,即可筛选出每月上旬的订单。

这里只是提供了一个方法,你可以用这个方法完成各种任意复杂的筛选,实际上,Foxtable本身的排除重复内容筛选,就是用这个方法实现的。

需要特别提醒的是,用于辅助筛选的列,必须是表达式列,不能是数据列,否则会严重影响执行和存取性能。

[此贴子已经被作者于2009-3-20 10:07:05编辑过]

--  作者:czy
--  发布时间:2009/3/20 10:22:00
--  
nnd,老六肚里究竞有多少这样的货啊。

顶了。
--  作者:狐狸爸爸
--  发布时间:2009/3/20 10:28:00
--  
呵呵,不多了,吐得差不多了。

图片点击可在新窗口打开查看
--  作者:smileboy
--  发布时间:2009/3/20 11:09:00
--  
再来2片泻立停
--  作者:湛江智
--  发布时间:2017/7/10 22:00:00
--  
学习