Office中国论坛/Access中国论坛

标题: 窗体中如何在筛选的基础上进行第二、第三次筛选 [打印本页]

作者: 软件下载    时间: 2012-2-7 19:32
标题: 窗体中如何在筛选的基础上进行第二、第三次筛选
本帖最后由 软件下载 于 2012-2-7 19:39 编辑



如上图
如果鼠标点中第三个字段,然后点“筛选”,在第二、第三次或更多筛选后,最后结果会是多次筛选后的总结果,比如我先筛选“*管理*”,再筛选“*经理*”,就会把“管理部经理”筛选出来。

可是如果上面4个文本框的每个更改事件代码如下:
me.filter="字段3 like '*" & me.text1.text & "*'"   (第二个文本框就是text2,以此类推)
me.filteron=true
这样在第一个文本框中输入“管理”,第二个文本框再输入“经理”后
下面的结果除了会出来“管理部经理”外,还会出来如“销售部经理”这样的。
就是说第二个筛选不是在第一个筛选的基础上再次筛选
请问如何做到第二个筛选在第一个筛选的基础上筛选?

有点拗口,不好意思。

补充提问:上图是我那个千万级数据的查询界面,在实际操作中我发现如果关键字只是2个字母,速度会非常快,如果是3-4个字母就有点卡,如果5个以上就卡得不行了,所以我想把输入的关键字按2个字母分解成若干个小关键字,可实际操作时发现这样没啥区别,难道在第二次筛选时窗体还会重新计算第一次的筛选过程吗?
作者: nxjswt    时间: 2012-2-22 15:18
其实你一个文本框就解决问题了,第一次输入管理部,第二次输入管理部经理 。
附窗体筛选代码

Me.Refresh
    Dim strWhere As String
    strWhere = ""
   
     If IsNull(Me.Text0) Then
        MsgBox "请输入要查询的简称!", vbExclamation, "警告!"
    End If
   
    If Not IsNull(Me.Text0) Then
        strWhere = strWhere & "([F3] like '*" & Me.Text0 & "*') AND "
    End If
   
              
'==========================================================
    If Len(strWhere) > 0 Then
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If

    Me.all1.Form.FilterOn = True
    Me.all1.Form.Filter = strWhere
作者: todaynew    时间: 2012-2-22 17:50
二楼nxjswt同志处理问题的方法是正确的,但还可以在此基础上有更好的方法。具体处理可参见《批判》一文。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3