以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于多条件筛选编写代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=179981)

--  作者:moseser
--  发布时间:2022/9/21 17:52:00
--  [求助]关于多条件筛选编写代码
我想在一个文本框textbox内输入内容 ,如  混凝土 C30 M3
其间用空格分开,表示多条件,    如 
dim value as string = e.Form.Controls("TextBox1").value
dim sp() as string = value.split(" ")                用空格断开
然后点击确认按钮后,进行表格的筛选

即:
( 类别列 包含 sp(0)  或者 项目名称列 包含 sp(0)  或者 项目特征列 包含 sp(0) 或者 工作内容列 包含 sp(0)     ) 且 ( 类别列 包含 sp(1)  或者 项目名称列 包含 sp(1  或者 项目特征列 包含 sp(1) 或者 工作内容列 包含 sp(1)     ) 且 ( 类别列 包含 sp(2)  或者 项目名称列 包含 sp(2  或者 项目特征列 包含 sp(2) 或者 工作内容列 包含 sp(2)     ) ………………

进行重复筛选

问题:后面的这段代码如何编写,我老是写不对

--  作者:有点蓝
--  发布时间:2022/9/22 8:43:00
--  
dim filter as string = "1=1"
dim sp() as string = value.split(" ") 
for each s as string in sp
filter = filter & " and (类别 like \'%" & s & "%\' or 项目名称 like \'%" & s & "%\' or .........)"
next


--  作者:moseser
--  发布时间:2022/9/22 15:54:00
--  回复:(有点蓝)dim filter as string = "1=1"dim sp...
dim filter as string = "1=1"
这一句是什么意思?

--  作者:有点蓝
--  发布时间:2022/9/22 16:08:00
--  
辅助合并条件用,减少代码,提高效率
--  作者:moseser
--  发布时间:2022/9/23 9:48:00
--  回复:(有点蓝)辅助合并条件用,减少代码,提高效率...
我想再扩展一下  如果 文字前面带有”-“ ,则表示 这些列内不含这个字

如: 混凝土 m3 -圈梁
这表示,下面列 包含混凝土  、m3 ,但不包含圈梁的 行

如下写的代码,不包含 部分是不是不对??

If e.TextBox.Text IsNot Nothing Then
    Dim filter As String = "1=1"
    Dim sp() As String = e.TextBox.Text.split(" ")
    
    For Each s As String In sp
        If s.StartsWith("-") Then
            
            Dim n As Integer = s.Length
            If n > 1 Then 
                s = right(s, n - 1) 
                filter = filter & " and (项目名称 like \'%" & s & "%\' and 项目特征 like \'%" & s & "%\' and 计量单位 like \'%" & s & "%\' and 单位工程 like \'%" & s & "%\' and 部位 like \'%" & s & "%\'   )"
            End If 
        Else
            filter = filter & " and (项目名称 like \'%" & s & "%\' or 项目特征 like \'%" & s & "%\' or 计量单位 like \'%" & s & "%\' or 单位工程 like \'%" & s & "%\' or 部位 like \'%" & s & "%\'   )"   
        End If
    Next
    Tables("清单_Table1").Filter = filter & " and 三级目录 = \'NotNamed\'  "
End If

--  作者:moseser
--  发布时间:2022/9/23 9:52:00
--  回复:(moseser)回复:(有点蓝)辅助合并条件用,减...
If e.TextBox.Text IsNot Nothing Then
    Dim filter As String = "1=1"
    Dim sp() As String = e.TextBox.Text.split(" ")
    
    For Each s As String In sp
        If s.StartsWith("-") Then
            
            Dim n As Integer = s.Length
            If n > 1 Then 
                s = right(s, n - 1) 
                filter = filter & " and (项目名称 not like \'%" & s & "%\' and 项目特征 not like \'%" & s & "%\' and 计量单位 not like \'%" & s & "%\' and 单位工程 not like \'%" & s & "%\' and 部位 not like \'%" & s & "%\'   )"
            End If 
        Else
            filter = filter & " and (项目名称 like \'%" & s & "%\' or 项目特征 like \'%" & s & "%\' or 计量单位 like \'%" & s & "%\' or 单位工程 like \'%" & s & "%\' or 部位 like \'%" & s & "%\'   )"   
        End If
    Next
    Tables("清单_Table1").Filter = filter & " and 三级目录 = \'NotNamed\'  "
End If

--  作者:moseser
--  发布时间:2022/9/23 9:57:00
--  
知道了,是不是把 not 写在前面?
 filter = filter & " and not (项目名称 like \'%" & s & "%\' or 项目特征 like \'%" & s & "%\' or 计量单位 like \'%" & s & "%\' or 单位工程 like \'%" & s & "%\' or 部位 like \'%" & s & "%\'   )"   

--  作者:moseser
--  发布时间:2022/9/23 10:04:00
--  回复:(有点蓝)辅助合并条件用,减少代码,提高效率...
感觉还是不对
--  作者:有点蓝
--  发布时间:2022/9/23 10:09:00
--  
6楼7楼一样的效果