以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  【求助】窗口设计中的多列筛选问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=126666)

--  作者:wangjx817
--  发布时间:2018/10/26 10:58:00
--  【求助】窗口设计中的多列筛选问题

图片点击可在新窗口打开查看此主题相关图片如下:剪辑_3.jpg
图片点击可在新窗口打开查看

我在设计一个窗口时,想通过开始时间和结束时间的控件来选择的某个时间段,并筛选出数据表中的(4个季度)的4列走访记录在该时间段的数据。在1列走访记录(如走访记录1列)的情况下筛选数据有效,多列数据同时筛选就无效l,望指点修改。我写的代码如下:
With e.Form.Controls("走访开始")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "走访记录1 >= #" & .Value & "#  or 走访记录2 >= #" & .Value & "#  or 走访记录3 >= #" & .Value & "#  or 走访记录2 >= #" & .Value & "# "
    End If
End With
With e.Form.Controls("走访结束")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "走访记录1 <= #" & .Value & "#  or 走访记录2 <= #" & .Value & "#  or 走访记录3 <= #" & .Value & "# or 走访记录4 <= #" & .Value & "#"
    End If
End With


--  作者:有点蓝
--  发布时间:2018/10/26 11:01:00
--  
With e.Form.Controls("走访开始")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "(走访记录1 >= #" & .Value & "#  or 走访记录2 >= #" & .Value & "#  or 走访记录3 >= #" & .Value & "#  or 走访记录2 >= #" & .Value & "# )"
    End If
End With
With e.Form.Controls("走访结束")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "(走访记录1 <= #" & .Value & "#  or 走访记录2 <= #" & .Value & "#  or 走访记录3 <= #" & .Value & "# or 走访记录4 <= #" & .Value & "#)"
    End If
End With

--  作者:wangjx817
--  发布时间:2018/10/26 11:47:00
--  
谢谢,有点效果,但是还是有瑕疵,就是走访结束控件的选择时间,不知什么原因不能控制筛选结果。就是,即使选定了走访结束时间点,筛选出的结果中会有走访记录的日期大于走访结束控件选择的日期,不知什么原因。
--  作者:有点蓝
--  发布时间:2018/10/26 12:01:00
--  
Dim filter2 As String
For i As Integer = 1 To 4
    Dim f2 As String = ""
    With e.Form.Controls("走访开始")
        If .Value IsNot Nothing Then
            f2 = f2 & "走访记录" & i & " >= #" & .Value & "# "
        End If
    End With
    With e.Form.Controls("走访结束")
        If .Value IsNot Nothing Then
            If f2 >"" Then
                f2 = f2 & " And "
            End If
            f2 = f2 & "走访记录" & i & " <= #" & .Value & "# "
        End If
    End With
    If filter2 >"" Then
        filter2 = filter2 & " or "
    End If
    filter2 = filter2 & f2
Next
If filter2 > "" Then
    msgbox(filter2 )
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & filter2
End If

--  作者:wangjx817
--  发布时间:2018/10/26 12:56:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:剪辑_6.jpg
图片点击可在新窗口打开查看

如上所示,点击查询按钮后,走访结束控件的时间选择后不能控制筛选结果。凡是大于走访开始时间的记录都筛选出来了。问题不知出在哪里?

--  作者:wangjx817
--  发布时间:2018/10/26 13:11:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:剪辑_7.jpg
图片点击可在新窗口打开查看
不过调试还是有问题。

--  作者:有点蓝
--  发布时间:2018/10/26 13:51:00
--  
With e.Form.Controls("走访开始")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "走访记录1 >= #" & .Value & "#   And 走访记录2 >= #" & .Value & "#   And 走访记录3 >= #" & .Value & "#   And 走访记录2 >= #" & .Value & "# "
    End If
End With
With e.Form.Controls("走访结束")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "走访记录1 <= #" & .Value & "#   And 走访记录2 <= #" & .Value & "#   And 走访记录3 <= #" & .Value & "#  And 走访记录4 <= #" & .Value & "#"
    End If
End With

--  作者:wangjx817
--  发布时间:2018/10/26 17:53:00
--  
or 改 and 筛选无数据结果,还是4楼的复杂代码有希望,就是缺一点可能就成功了。
--  作者:wangjx817
--  发布时间:2018/10/26 18:37:00
--  
老师,4楼的代码重新测试有效,可以使用了。非常谢谢!
--  作者:wangjx817
--  发布时间:2018/10/29 9:52:00
--  

老师。4楼的代码能够准确的筛选出时间段,但是在与其他列的组合筛选时,譬如选择某个管理站时没有变化,不知为什么?
Dim Filter As String
With e.Form.Controls("管理站")
    If .Value IsNot Nothing Then
        Filter = "管理站 = \'" & .Value & "\'"
    End If
End With
Dim filter2 As String
For i As Integer = 1 To 4
    Dim f2 As String = ""
    With e.Form.Controls("走访开始")
        If .Value IsNot Nothing Then
            f2 = f2 & "走访记录" & i & " >= #" & .Value & "# "
        End If
    End With
    With e.Form.Controls("走访结束")
        If .Value IsNot Nothing Then
            If f2 >"" Then
                f2 = f2 & " And "
            End If
            f2 = f2 & "走访记录" & i & " <= #" & .Value & "# "
        End If
    End With
    If filter2 >"" Then
        filter2 = filter2 & " or "
    End If
    filter2 = filter2 & f2
Next
If filter2 > "" Then
    msgbox(filter2 )
    If Filter > "" Then
        Filter = Filter & " And "
    End If
    Filter = Filter & filter2
End If

If Filter >"" Then
    Tables("住宅小区基础信息表_住宅小区信息汇总表").Filter = Filter
End If