以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  可否用遍历所有列进行全表搜索  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=52890)

--  作者:fubblyc
--  发布时间:2014/6/25 11:00:00
--  可否用遍历所有列进行全表搜索

各位老师好,我知道可以用这种方式实现全表搜索:

http://www.foxtable.com/help/index.html?n=1534.htm

 

Dim txt As String = e.Form.Controls("TextBox1").Text
Dim tbl As Table = Tables("窗口1_Table1")

If
txt = "" Then
    tbl.Filter = ""

Else

    txt =
"\'%" & txt & "%\'"
    tbl.Filter =
"客户ID Like " & txt & " Or 公司名称 Like " & txt & " Or 地址 Like " & txt & " Or 联系人 Like " & txt
End
If

这样我们在文本框中输入任何内容,Table就会自动进行模糊筛选,显示客户ID、公司名称、地址、联系人这四列中,任何一列包括输入内容的行。
注意只有字符列才能使用Like进行模糊筛选,其它列类型是不可以的。

 

那可以不可以用遍历列的形式来写  tbl.Filter = "客户ID Like " & txt & " Or 公司名称 Like " & txt & " Or 地址 Like " & txt & " Or 联系人 Like " & txt

就不用把所有列都写在里面了。

 

Dim Filter As String = "1=1"

For Each c As DataCol In DataTables("VIP基本信息大海_VIP基本信息").DataCols
With e.Form.Controls("搜索框")
    If .Value IsNot Nothing Then
        Filter = "c = \'" & .Value & "\' "  哈,这样写肯定不对,因为C不是列名。不知道有没有这样的方法。。。
    End If
End With

Next

If Filter > "" Then
DataTables("VIP基本信息大海_VIP基本信息").LoadFilter = filter
DataTables("VIP基本信息大海_VIP基本信息").Load()
End If


--  作者:Bin
--  发布时间:2014/6/25 11:05:00
--  
Filter =Filter & "and " &  c.Name & " like \'%" & .Value & "%\' "


DataTables("VIP基本信息大海_VIP基本信息").LoadFilter = filter.substring(3,Filter.length-3)




--  作者:有点甜
--  发布时间:2014/6/25 11:06:00
--  

 

Dim Filter As String = "1=2"

Dim val As String = e.Form.Controls("搜索框").Text
If val > "" Then
    For Each c As DataCol In DataTables("VIP基本信息大海_VIP基本信息").DataCols
        Filter &= " or Convert(" & c.name & ",\'System.String\') like \'*" & val & "*\'  "
    Next
End If

If filter > "" Then
    DataTables("VIP基本信息大海_VIP基本信息").LoadFilter = filter
    DataTables("VIP基本信息大海_VIP基本信息").Load()
End If

[此贴子已经被作者于2014-6-25 11:07:16编辑过]

--  作者:fubblyc
--  发布时间:2014/6/25 11:23:00
--  可否用遍历所有列进行全表搜索

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

哇,Bin老师,甜老师,你们都是高手,都运用的炉火纯青的!!

 

我刚才用甜老师的试了一下,我知道甜老师的这段代码是帮我把我所有字段的类型都转成字符类型,这样就可以用like模糊搜索。

出现了下面这个问题。。。不是已定义的系统类型   所有列都在错误里面,不管是不是字符类型的。。


[此贴子已经被作者于2014-6-25 11:34:24编辑过]

--  作者:有点甜
--  发布时间:2014/6/25 11:27:00
--  

哦,写错了,是加载

 

Dim Filter As String = "1=2"

Dim val As String = e.Form.Controls("搜索框").Text
If val > "" Then
    For Each c As DataCol In DataTables("VIP基本信息大海_VIP基本信息").DataCols
        Filter &= " or Convert(varchar(100), " & c.name & ") like \'%" & val & "%\'  "
    Next
End If

If filter > "" Then
    DataTables("VIP基本信息大海_VIP基本信息").LoadFilter = filter
    DataTables("VIP基本信息大海_VIP基本信息").Load()
End


--  作者:Bin
--  发布时间:2014/6/25 11:27:00
--  
Filter &= " or Convert([" & c.name & "],\'System.String\') like \'*" & val & "*\'  "

这样看看

--  作者:fubblyc
--  发布时间:2014/6/25 12:11:00
--  可否用遍历所有列进行全表搜索
搞定,谢谢Bin老师!!谢谢甜老师!!!
--  作者:jswalley
--  发布时间:2014/6/25 20:21:00
--  
我按照这种方法,提示 表达式中 \'Convert\' 函数未定义。
--  作者:有点甜
--  发布时间:2014/6/25 20:40:00
--  
以下是引用jswalley在2014-6-25 20:21:00的发言:
我按照这种方法,提示 表达式中 \'Convert\' 函数未定义。

 

如果是Access数据源,用format转换

 

Dim Filter As String = "1=2"

Dim val As String = e.Form.Controls("搜索框").Text
If val > "" Then
    For Each c As DataCol In DataTables("VIP基本信息大海_VIP基本信息").DataCols
        Filter &= " or Format(" & c.name & ") like \'%" & val & "%\'  "
    Next
End If

If filter > "" Then
    DataTables("VIP基本信息大海_VIP基本信息").LoadFilter = filter
    DataTables("VIP基本信息大海_VIP基本信息").Load()
End