以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]求助各位大大,如何实现又like,又in的查询筛选  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=91988)

--  作者:colahou
--  发布时间:2016/10/24 9:15:00
--  [求助]求助各位大大,如何实现又like,又in的查询筛选
本人没什么基础,特请教各位大大如何实现。
有一个窗口X,窗口内有一张表x,表内有一列“专业”,该列内容在输入窗口以目录树形式输入多级内容包括A,a1,a2,……B,b1,b2……等
窗口内有一个dropbox1控件,对应窗口表“专业”列内容,该控件采用目录树形式输入多级内容,包括A,a1,a2,……B,b1,b2……等
窗口内的查询按钮希望实现根据dorpbox1内容进行筛选并载入,现在的代码为

Dim txt As String = e.Form.Controls("dropbox1").Text
Dim tbl As Table = Tables("X_x")
If txt = "" Then
    tbl.Filter = ""
Else
    txt = "\'%" & txt & "%\'"
    tbl.Filter =" 专业 Like " & txt

End If


该代码有一个问题就是当“专业”列的内容为A,a1,a2,而dropbox1内容为A,a1时可以筛选,但当dropbox1内容为A,a1,a2,……B,b1,b2时就无法筛选,用in的话感觉后面的情况可以筛选,但是前面的这种又筛选不出。希望实现只要不管dorpbox1和表列里的内容谁多,只要有一项对应上就可以筛选出来。

请问这样的代码应该怎么写?

--  作者:有点蓝
--  发布时间:2016/10/24 9:28:00
--  
建议创建一个表,专门存储这个专业。1楼这种存储方式到后期查询统计会非常麻烦。
--  作者:colahou
--  发布时间:2016/10/24 9:45:00
--  
是专门有张表的,就是目录树的来源,dropbox1和专业列的内容来源都是来源这张表,现在就是想实现根据dorpbox1的内容筛选专业列里符合条件的行
--  作者:有点蓝
--  发布时间:2016/10/24 9:53:00
--  
再创建一个表,不是存储目录树的来源,而是存储表x选择后的结果,相当于是表x的子表
--  作者:colahou
--  发布时间:2016/10/24 10:15:00
--  
那怎么写只要有一项符合就能筛选出来呢?不管谁的内容更多?
--  作者:有点蓝
--  发布时间:2016/10/24 10:31:00
--  
要么用in ,要么用like,没有办法一起用。而且数据多的话这两种用法效率都非常差,能避免就避免。

Dim txt As String = e.Form.Controls("dropbox1").Text
Dim tbl As Table = Tables("X_x")
If txt = "" Then
    tbl.Filter = ""
Else
    Dim filter As String = "1=2 "
    Dim str() As String = txt.Split(",")
    For Each s As String In str
        filter &="or 专业 Like \'%" & s & "%\'"
    Next
    tbl.Filter = filter 
End If

--  作者:colahou
--  发布时间:2016/10/24 11:12:00
--  
谢谢斑斑指点, Dim filter As String = "1=2 "什么意思?
--  作者:有点蓝
--  发布时间:2016/10/24 11:41:00
--  
占位用,目的是减少代码判断的工作量
--  作者:colahou
--  发布时间:2016/10/24 11:54:00
--  
感谢,您的代码已可以实现我的想法。非常感谢