Foxtable(狐表)用户栏目专家坐堂 → 请教对学历(文本)筛选的方法


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

主题:请教对学历(文本)筛选的方法

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
请教对学历(文本)筛选的方法  发帖心情 Post By:2015/12/7 21:36:00 [只看该作者]

1、在【数据字典】表中有许多列,其中三列:


(数值)(文本)(文本)

  序号     学历    出生年月

  1       博士     198012

  2       硕士     198011

  3       本科     198010

  4       大专     198009

  5       中专     198008

  6       高中     198007

  7       初中     198006

  8                  198005

  9                  198004

 10                 198003

 11                 198002

 12                 198001

 

2、在【职工表】中也有对应的上述三列

 

3、在[职工表]中设置一个筛选,表示找出在198005后出生的记录

Dim Filter As String = ""

Filter = " 出生年月 >  ‘198005’ "

Tables("职工表").Filter = Filter


4、如果要找出学历高于大专的记录Filter = " 学历 >  ‘大专’" 应如何修改?可不可以利用【数据字典】中的“序号”来实现

5、如果把“中专”和“高中”视为同等学历,Filter = " 学历 = ‘高中’" ,希望结果是学历为高中或者中专的,又该如何修改?


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/7 21:44:00 [只看该作者]

既然学历种类不多,就直接写

 

.Filter = "学历 in ('大专', '本科', '硕士', '博士')"

 

.Filter = "学历 in ('中专', '高中')"


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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/7 22:39:00 [只看该作者]

也是,我想复杂了

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/7 22:42:00 [只看该作者]

看到in的用法,我就想到一个遇到的问题:

1、我想把  If sx2.text = "所有列" orelse sx2.text = "实发合计" Then

改为      If sx2.text in  ("所有列" ,"实发合计") Then  ,提示出错了

2、 改的原因是,我在实际书写的时候,在一个IF后面,有好多个 orelse连接,觉得字符太长
[此贴子已经被作者于2015/12/7 22:42:22编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/7 23:29:00 [只看该作者]

1、代码没有 in 这种语法的,你可以用select

 

Select case sx2.Text

    case "大专", "本科"

        msgbox("大专以上")

    case "高中"

 

End Select


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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/9 23:31:00 [只看该作者]

根据2楼的说法 :

我有三个组合框
                  sx1     sx2          sx3
对应选项       学历     高于       研究生
                   职务    低于         本科
                             等于         专科
                            不高于       中专
                            不低于       师范
                            类同于       高中
                                            初中

sx2 的选项 有 6种,sx3的选项有7种,排列组合就有42种,写起来有点麻烦

想法:
在【数据字典】中设置了下列 两列
学历等级    学历
     7         研究生
     6         本科
     5         专科
     3         中专
     3         师范
     2         高中
     1         初中

代码有问题,但思路如下:

Dim sx1 As WinForm.ComboBox = e.Form.Controls("筛选1")

Dim sx2 As WinForm.ComboBox = e.Form.Controls("筛选2")

Dim sx3 As WinForm.ComboBox = e.Form.Controls("筛选3")

Dim Filter As String = ""

Dim 筛选项目 As String = ""

 

if sx1.text = "最高学历" Then

        筛选项目 = "学历"

        Dim dr As DataRow

        dr =DataTables("数据字典").Find("[学历]='" & sx3.text & "'")

        Dim xldj As String  = dr("学历等级")   '求得学历对应的等级

        msgbox( xldj  )   ‘如果sx3选专科,这里的值为5

        If sx2.text = "高于" Then

            '开始求出一个高于 xldj 的学历组合

            'Dim lt As new List(Of String)    '定义集合

            Dim lt As List(of String) = DataTables("数据字典").GetUniqueValues("[学历等级] > xldj ","学历")  

                            ‘这里不知道该用组合还是用数组

            Dim alt() As String = lt.ToArray

            Array.Sort(alt)

            Dim slt As String = String.Join("|", alt)

            Dim drz As DataRow

            drz = DataTables("教职工信息表").Find("")

            Filter = " [最高学历_学历] in   lt ")                   '该句不知道如何叙述

        ElseIf 。。。

            。。。

        else

            Filter = ""

        End If

    else

        Filter = ""

    End If

else

    Filter = ""

End If

 

Tables("教职工信息表").Filter = Filter


绿色部分 只是思路,有好多错误,可自己无法写出来了 ,恳请老师指导!


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2015/12/10 8:28:00 [只看该作者]


If sx1.text = "最高学历" Then
    筛选项目 = "学历"
    Dim dr As DataRow
    dr =DataTables("数据字典").Find("[学历]='" & sx3.text & "'")
    If dr IsNot Nothing Then
        Dim xldj As String  = dr("学历等级")   '求得学历对应的等级
        msgbox( xldj  )   '如果sx3选专科,这里的值为5
        If sx2.text = "高于" Then
            '开始求出一个高于 xldj 的学历组合
            'Dim lt As new List(Of String)    '定义集合
            Dim lt As List(of String) = DataTables("数据字典").GetValues("学历","[学历等级] > xldj ")
            '这里不知道该用组合还是用数组
            Dim alt() As String = lt.ToArray
            Dim slt As String = String.Join(",", alt)
            Filter = " [最高学历_学历] in ('" & slt.Replace(",","','") & "')"))                   '该句不知道如何叙述
        ElseIf ...
            ...
        Else
            Filter = ""
        End If
    End If
Else
    Filter = ""
End If
Else
    Filter = ""
End If

Tables("教职工信息表").Filter = Filter




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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 9:35:00 [只看该作者]

加上等级列、同类等级列,然后各种情况都可以直接判断大小得到答案了啊

 

     7         研究生      5 
     6         本科         4
     5         专科         3
     4         中专         2
     3         师范         2
     2         高中         2
     1         初中         1

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/10 11:51:00 [只看该作者]

Filter = " [最高学历_学历] in ('" & slt.Replace(",","','") & "')"))    

里面的左括号和右括号不一样多

我改为:
Filter = " [最高学历_学历] in ('" & slt.Replace(",","','") & "') "
[此贴子已经被作者于2015/12/10 11:57:56编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/10 11:53:00 [只看该作者]

Filter = " [最高学历_学历] in ('" & slt.Replace(",","','") & "')"

 回到顶部
总数 16 1 2 下一页