以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  多关键词模糊查找  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=94354)

--  作者:luckbetter333
--  发布时间:2016/12/21 19:11:00
--  多关键词模糊查找
参考自定义录入界面二做了模糊查询窗口,但是发现不能多个关键词查询,请问如何做到?另外自身带的查找功能限制了列名,只能一列一列查询,能不能实现整个表格多个关键词模糊查询
--  作者:y2287958
--  发布时间:2016/12/21 19:14:00
--  
搜索“全表模糊查找”
--  作者:luckbetter333
--  发布时间:2016/12/21 19:31:00
--  
可以多个关键词么?
--  作者:有点色
--  发布时间:2016/12/21 20:04:00
--  
以下是引用luckbetter333在2016/12/21 19:31:00的发言:
可以多个关键词么?

 

那你就用空格分割多个关键字

 

Dim str As String = e.Form.Controls("TextBox1").Text
Dim filter As String = "1=2"
For Each dc As Col In CurrentTable.Cols
    For Each s As String In str.split(" ")
        filter &= " Or convert(" & dc.Name & ",\'System.String\') like \'%" & s & "%\'"
    Next
Next
CurrentTable.Filter = filter


--  作者:luckbetter333
--  发布时间:2016/12/22 9:33:00
--  
按照您的代码做的,一搜索就什么都没了, 不知道哪里出的问题 。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多关键词产品模糊搜索.rar

已经上传, 请帮忙看看。
--  作者:狐狸爸爸
--  发布时间:2016/12/22 9:59:00
--  
正确的代码:

Dim str As String = e.Form.Controls("TextBox1").Text
Dim filter As String = "1=2"
For Each dc As Col In Tables("产品模糊查找_Table1").Cols
    For Each s As String In str.split(" ")
        filter &= " Or convert(" & dc.Name & ",\'System.String\') like \'%" & s & "%\'"
    Next
Next
Tables("产品模糊查找_Table1").Filter = filter
[此贴子已经被作者于2016/12/22 10:02:25编辑过]

--  作者:狐狸爸爸
--  发布时间:2016/12/22 10:02:00
--  
CurrentTable是什么,你都搞混了
建议先看一遍置顶的视频教程,然后再动手设计,否则你寸步难行,即使在别人的帮助下做出来,系统质量也堪忧。

--  作者:luckbetter333
--  发布时间:2016/12/22 10:07:00
--  
谢谢狐爸,单位想一月份能上线,只能先取捷径,有时间一定从头学习。
--  作者:luckbetter333
--  发布时间:2016/12/22 10:17:00
--  
试了下,不是预期的效果,增加空格增加关键词后,反而增加了产品范围,是不是应该改成多关键词准确搜索?
--  作者:有点色
--  发布时间:2016/12/22 10:43:00
--  

参考代码

 

Dim str As String = e.Form.Controls("TextBox1").Text
Dim t As Table = Tables("产品模糊查找_Table1")
If str = "" Then
    t.Filter = ""
Else
    Dim ary() As String = str.split(" ")
    Dim idxs As String = "-1,"
    For Each r As DataRow In t.DataTable.dataRows
        Dim count As Integer = 0
        For Each s As String In ary
            For Each c As Col In t.Cols
                If Cstr(r(c.name)).Contains(s) Then
                    count += 1
                    Exit For
                End If
            Next
        Next
        If count = ary.Length Then
            idxs &= r("_Identify") & ","
        End If
    Next
    t.Filter = "_Identify in (" & idxs.Trim(",") & ")"
End If