Foxtable(狐表)用户栏目专家坐堂 → 可否用遍历所有列进行全表搜索


  共有4996人关注过本帖树形打印复制链接

主题:可否用遍历所有列进行全表搜索

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
可否用遍历所有列进行全表搜索  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/6/25 11:05:00 [只看该作者]

Filter =Filter & "and " &  c.Name & " like '%" & .Value & "%' "


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




 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
可否用遍历所有列进行全表搜索  发帖心情 Post By:2014/6/25 11:23:00 [只看该作者]

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

 

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

 

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

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


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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/6/25 11:27:00 [只看该作者]

Filter &= " or Convert([" & c.name & "],'System.String') like '*" & val & "*'  "

这样看看

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
可否用遍历所有列进行全表搜索  发帖心情 Post By:2014/6/25 12:11:00 [只看该作者]

搞定,谢谢Bin老师!!谢谢甜老师!!!

 回到顶部
帅哥哟,离线,有人找我吗?
jswalley
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:529 积分:4701 威望:0 精华:0 注册:2012/7/4 16:22:00
  发帖心情 Post By:2014/6/25 20:21:00 [只看该作者]

我按照这种方法,提示 表达式中 'Convert' 函数未定义。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部