以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  loadfilter 无法多条件筛选问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=141532)

--  作者:swagger
--  发布时间:2019/10/2 20:09:00
--  loadfilter 无法多条件筛选问题
无法多条件筛选


Dim txt As String = e.Form.Controls("TextBox").Text
Dim tbl As Table = Tables("订单_Table1")


With e.Form.Controls("textbox1")

If txt = "" Then
     tbl.Filter = ""
Else
    txt = "\'%" & txt & "%\'"
    tbl.DataTable.loadFilter = "([客户名称] like \'%" & .Value & "%\' Or [公司名称] like \'%" & .Value & "%\' )"
        tbl.DataTable.loadPage = 0
        tbl.DataTable.load
End If

End With

With e.Form.Controls("textbox2")

If txt = "" Then
     tbl.Filter = ""
Else
    txt = "\'%" & txt & "%\'"
    tbl.DataTable.loadFilter = "([产品名称] like \'%" & .Value & "%\' )"
        tbl.DataTable.loadPage = 0
        tbl.DataTable.load
End If

End With

--  作者:swagger
--  发布时间:2019/10/2 20:10:00
--  
不在问题出在哪里
--  作者:小马甲
--  发布时间:2019/10/2 20:36:00
--  
把筛选的语句输出来,看看问题在哪里.
--  作者:swagger
--  发布时间:2019/10/3 11:06:00
--  
测试另外一段代码,也是不行:


Dim Filter As String
Dim tbl As Table = Tables("订单_table1")

With e.Form.Controls("textbox1")
    If .Value IsNot Nothing Then
        tbl.DataTable.loadFilter =  "客户名称 like \'%" & .Value & "%\' Or 公司名称 like \'%" & .Value & "%\' “   
        tbl.DataTable.loadPage = 0
        tbl.DataTable.load
End If 
End With


With e.Form.Controls("textbox2")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If 
 Filter = Filter &  "产品名称 like \'%" & .Value & "%\'”         
        tbl.DataTable.loadFilter = Filter         
        tbl.DataTable.loadPage = 0
        tbl.DataTable.load

    End If
End With


With e.Form.Controls("DateTimePicker1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= \'" & .Value & "\'"
tbl.DataTable.loadFilter = Filter        
tbl.DataTable.loadPage = 0
        tbl.DataTable.load
    End If
End With


With e.Form.Controls("DateTimePicker2")
    If .Value IsNot Nothing Then
        If Filter <"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "日期 >= \'" & .Value & "\'"
tbl.DataTable.loadFilter = Filter        
tbl.DataTable.loadPage = 0
        tbl.DataTable.load
    End If
End With



textbox1 和 textbox2 只能二选一,要么显示所有输入的客户名称或者公司名称,要么显示所有输入的产品名称,无法显示输入的客户名称和产品名称的搜索结果。 而datetimepicker则没问题,输入一个客户名称,选择时间,则可以显示那段时间的客户
[此贴子已经被作者于2019/10/3 11:07:18编辑过]

--  作者:swagger
--  发布时间:2019/10/3 17:16:00
--  
花了一天时间研究,问题已解决。附解决办法:把loadfilter放在最后就可以

Dim Filter As String
Dim tbl As Table = Tables("订单_table1")

With e.Form.Controls("textbox1")
    If .Value IsNot Nothing Then
        Filter =  "客户名称 like \'%" & .Value & "%\' Or 公司名称 like \'%" & .Value & "%\' “    
End If 
End With


With e.Form.Controls("textbox2")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If 
 Filter = Filter &  "产品名称 like \'%" & .Value & "%\'”         
  
    End If
End With



If Filter > "" Then
tbl.DataTable.loadFilter = Filter         
tbl.DataTable.loadPage = 0
tbl.DataTable.load
End If