以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  多字段查询  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=119635)

--  作者:jinhetian
--  发布时间:2018/5/29 10:22:00
--  多字段查询
老师上午好。
如图所示做了一个查询窗口,现在单字段的查询没有问题。就是查询不了多字段。比如,要查询第一行多字段中的无故障项。看了帮助文档里的多字段查询内容,但看不明白。老师能帮忙解决一下吗?谢谢!
图片点击可在新窗口打开查看此主题相关图片如下:q.jpg
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2018/5/29 10:51:00
--  

参考

 

http://www.foxtable.com/webhelp/scr/1058.htm

 

比如

 

Filter = Filter & "客户 = \'" & .Value & "\'"

 

改成

 

Dim str As String = "1=2"

For Each s As String in .Value.split(",")

    str &= " or 客户 = \'" & s & "\'"

Next

Filter = Filter & " (" & str & ") "

[此贴子已经被作者于2018/6/5 16:34:10编辑过]

--  作者:jinhetian
--  发布时间:2018/5/29 11:45:00
--  
老师,还是解决不了?
With e.Form.Controls("DropBox1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Dim str As String = "1=2"        \' 这段是什么意思?
       For Each s As String In .Value.split(",")
            str &= " or 故障原因 = \'" & .Value & "\'"
        Next
        Filter = Filter & " (" & str & ") "
    End If
End With

[此贴子已经被作者于2018/5/29 11:47:13编辑过]

--  作者:有点甜
--  发布时间:2018/5/29 11:50:00
--  

为了组合字符串,最终合成如

 

1=2 or 第一列=\'123\' or 第一列=\'abc\'

 

这样就不需要处理最前面一个or,当然你删掉1=2也行,同时要删除or


--  作者:jinhetian
--  发布时间:2018/5/29 15:45:00
--  
老师,根据您的解释红色区域的编码是不是要改成“5=2”(故障原因是第五列)。整体代码运行后多字段还是不能查询。请老师帮忙解决一下,我现在一头雾水!
With e.Form.Controls("DropBox1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Dim str As String = "5=2"        \' 修改编码
       For Each s As String In .Value.split(",")
            str &= " or 故障原因 = \'" & .Value & "\'"
        Next
        Filter = Filter & " (" & str & ") "
    End If
End With

--  作者:有点甜
--  发布时间:2018/5/29 15:57:00
--  

最后msgbox(str)弹出什么?

 

或者,你做一个实例发上来测试。


--  作者:jinhetian
--  发布时间:2018/5/29 16:17:00
--  
老师,显示情况是这样的。
With e.Form.Controls("DropBox1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Dim str As String = "5=2"
        For Each s As String In .Value.split(",")
            str &= " or 故障原因 = \'" & .Value & "\'"     
        Next
        Filter = Filter & " (" & str & ") "
msgbox(str)
    End If
End With

图片点击可在新窗口打开查看此主题相关图片如下:a.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2018/5/29 16:18:37编辑过]

--  作者:有点甜
--  发布时间:2018/5/29 17:08:00
--  

改成

 

With e.Form.Controls("DropBox1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Dim str As String = "5=2"
        For Each s As String In .Value.split(",")
            str &= " or 故障原因 like \'%" & s & "%\'"    
        Next
        Filter = Filter & " (" & str & ") "

    End If
End With

[此贴子已经被作者于2018/6/5 16:33:48编辑过]

--  作者:有点甜
--  发布时间:2018/5/29 17:09:00
--  

或者

 

改成

 

With e.Form.Controls("DropBox1")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Dim str As String = "1=1"
        For Each s As String In .Value.split(",")
            str &= " and 故障原因 like \'%" & s & "%\'"    
        Next
        Filter = Filter & " (" & str & ") "

    End If
End With

[此贴子已经被作者于2018/6/5 16:33:22编辑过]

--  作者:jinhetian
--  发布时间:2018/5/30 9:09:00
--  
老师,问题解决了。不管是单字段还是多字段都能查询了。非常感谢!