以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何正确匹配数据进行精准筛选  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=175668)

--  作者:cnsjroom
--  发布时间:2022/3/15 1:06:00
--  如何正确匹配数据进行精准筛选

窗体表:

设定为sqltable 并绑定 sel ect * from {干部花名册}

窗体加载时判断:
If _usergroup.Contains("办公室") Or _usergroup.Contains("干部") Then
    Tables(e.Form.Name & "_table1").Filter=""
Else
    If _userroles.Contains("管理") Then
        Tables(e.Form.Name & "_table1").Filter="所属室组=\'" & _usergroup & "\'"
    Else
        Tables(e.Form.Name & "_table1").Filter="工作单位=\'" & _usergroup & "\'"
    End If
End If

运行效果如下:

 
此主题相关图片如下:11.png
按此在新窗口浏览图片

模糊检索框代码如下:

Dim txt As String = e.Form.Controls("TextBox12").Text
Dim bb As  String
If txt = "" Then
    Tables(e.Form.Name & "_table1").Filter = ""
Else
    txt = "\'%" & txt & "%\'"
    \'MessageBox.Show("0")
    Dim s As String = "1=2"
    For Each dc As Col In Tables(e.Form.Name & "_table1").Cols
        \'MessageBox.Show(dc.Name)
        If dc.IsString Then
            s = s & " or " & dc.Name & " Like " & txt
        End If
    Next
    If _usergroup.Contains("办公室") Or _usergroup.Contains("干部") Then
        bb=""
    Else
        If _userroles.Contains("管理") Then
            bb="所属室组=\'" & _usergroup & "\'"
        Else
            bb="工作单位=\'" & _usergroup & "\'"
        End If
    End If
    Tables(e.Form.Name & "_table1").Filter = s
End If

 

 

在模糊输入框中 输入上述图片中没有的名字或者删除输入字符后,系统会显示当前所有的四行数据,

 
此主题相关图片如下:22.png
按此在新窗口浏览图片

怎么实现数据只能在第一张图的两行数据里筛选  而不是从库表中的所有行进行筛选呢?


[此贴子已经被作者于2022/3/15 1:06:16编辑过]

--  作者:有点蓝
--  发布时间:2022/3/15 8:29:00
--  
 窗口加载时的条件,合并到模糊检索框代码里
--  作者:cnsjroom
--  发布时间:2022/3/15 8:45:00
--  回复:(有点蓝) 窗口加载时的条件,合并到模糊...

模糊检索框代码如下:【我试着合并条件,但是没有成功,麻烦老师指导下】

Dim txt As String = e.Form.Controls("TextBox12").Text
Dim bb As  String
If txt = "" Then
    Tables(e.Form.Name & "_table1").Filter = ""
Else
    txt = "\'%" & txt & "%\'"
    \'MessageBox.Show("0")
    Dim s As String = "1=2"
    For Each dc As Col In Tables(e.Form.Name & "_table1").Cols
        \'MessageBox.Show(dc.Name)
        If dc.IsString Then
            s = s & " or " & dc.Name & " Like " & txt
        End If
    Next
    If _usergroup.Contains("办公室") Or _usergroup.Contains("干部") Then
        bb=""
    Else
        If _userroles.Contains("管理") Then
            bb="所属室组=\'" & _usergroup & "\'"
        Else
            bb="工作单位=\'" & _usergroup & "\'"
        End If
    End If
    Tables(e.Form.Name & "_table1").Filter = s
End If


--  作者:有点蓝
--  发布时间:2022/3/15 8:53:00
--  
Tables(e.Form.Name & "_table1").Filter = s & " and " & bb
--  作者:cnsjroom
--  发布时间:2022/3/15 9:16:00
--  回复:(有点蓝)Tables(e.Form.Name & "_table1"...

试过  提示如下:


图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看
还是会加载所有的数据,而不是从那两条数据里面筛选出来……
--  作者:有点蓝
--  发布时间:2022/3/15 9:19:00
--  
Tables(e.Form.Name & "_table1").Filter = “(” s & ") and " & bb


--  作者:cnsjroom
--  发布时间:2022/3/15 9:45:00
--  回复:(有点蓝)Tables(e.Form.Name & "_table1"...

参照老师的提示  现代码如下:【红色部分代码怎么进行提示呢  当前用户属性加载的数据,如果输入的值在总数据库表里面存在,但是不属于当前用户属性的就提示他联系某某室组  反之就提示不存在】

Dim txt As String = e.Form.Controls("TextBox12").Text
Dim bb As  String

If _usergroup.Contains("办公室") Or _usergroup.Contains("干部") Then
    bb=""
Else
    If _userroles.Contains("管理") Then
        bb="所属室组=\'" & _usergroup & "\'"
    Else
        bb="工作单位=\'" & _usergroup & "\'"
    End If
End If

If txt = "" Then
    Tables(e.Form.Name & "_table1").Filter = bb
Else
    txt = "\'%" & txt & "%\'"
    Dim s As String = "1=2"
    For Each dc As Col In Tables(e.Form.Name & "_table1").Cols
        If dc.IsString Then
            s = s & " or " & dc.Name & " Like " & txt
        End If
    Next
    Tables(e.Form.Name & "_table1").Filter = "(" & s & ") and " & bb
   
   
    Dim br As  DataRow =DataTables(e.Form.Name & "_table1").Select("")
    If  br IsNot  Nothing  Then
        MessageBox.Show("该数据不在你所查询的权限内,请联系" & br("所属室组") & "!","温馨提示")
    End If
End If


--  作者:有点蓝
--  发布时间:2022/3/15 9:47:00
--  
Dim br As  DataRow =DataTables(e.Form.Name & "_table1").find("xxx条件")
--  作者:cnsjroom
--  发布时间:2022/3/15 10:35:00
--  回复:(有点蓝)Dim br As  DataRow =DataTable...

当前代码如下:【运行过程中会根据输入的字符数量,对应提示字符数量的信息次数,有没有办法只实现弹出一次提醒呢?】

代码放在了控件textchanged事件里面  怎么实现在实现模糊检索的情况下 又能够精准弹出提示

 

Dim txt As String = e.Form.Controls("TextBox12").Text
Dim bb As  String

If _usergroup.Contains("办公室") Or _usergroup.Contains("干部") Then
    bb=""
Else
    If _userroles.Contains("管理") Then
        bb="所属室组=\'" & _usergroup & "\'"
    Else
        bb="工作单位=\'" & _usergroup & "\'"
    End If
End If

If txt = "" Then
    Tables(e.Form.Name & "_table1").Filter = bb
Else
    txt = "\'%" & txt & "%\'"
    Dim s As String = "1=2"
    For Each dc As Col In Tables(e.Form.Name & "_table1").Cols
        If dc.IsString Then
            s = s & " or " & dc.Name & " Like " & txt
        End If
    Next
    Dim br As  DataRow =DataTables(e.Form.Name & "_table1").find(s)
    If  br IsNot  Nothing  Then
        Tables(e.Form.Name & "_table1").Filter = "(" & s & ") and " & bb
        Dim zs1 As Integer = Tables(e.Form.Name & "_Table1").Count
        If zs1 >0 Then
        Else
            MessageBox.Show("该数据不在你所查询的权限内,请联系" & br("所属室组") & "!","温馨提示")
        End If
    Else
        MessageBox.Show("该数据不存在,请核对数据是否输入正确!","温馨提示")
    End If
End If


--  作者:有点蓝
--  发布时间:2022/3/15 10:38:00
--  
放到valuechanged事件