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


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

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

帅哥哟,离线,有人找我吗?
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 = " 学历 = ‘高中’" ,希望结果是学历为高中或者中专的,又该如何修改?


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


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

也是,我想复杂了

 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  3楼 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  4楼 | 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


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


 回到顶部
帅哥哟,离线,有人找我吗?
zhangchi96
  5楼 | 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编辑过]

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/10 11:59:00 [显示全部帖子]

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

其中的 xldj 要改为 ‘xldj ’  吧?


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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/10 12:07:00 [显示全部帖子]

我把 Dim lt As List(of String) = DataTables("数据字典").GetValues("学历","[学历等级] > " & xldj)
改成了:Dim lt As List(of String) = DataTables("数据字典").GetUniqueValues("[学历等级] > " & xldj  , "学历")  
测试基本通过,我再全面完善看看

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/10 13:05:00 [显示全部帖子]

测试全部通过,再谢大红袍老师花费了好多宝贵的时间为我解决疑难问题。

由于不同情况下提出的筛选条件不同,即Filter的结果不是固定的,如果要统计筛选的数据记录的个数进行统计
是不是这样写:

msgbox( Filter   )
Dim 筛选统计 As Integer'
筛选统计 = 0
For Each dr4 As Row In Tables("教职工信息表").Rows
    If Filter = true Then
        筛选统计 = 筛选统计 + 1
     End If
Next
msgbox( "筛选后人数 : " &  筛选统计)

但事实上写错了。请大红袍老师指点迷津
[此贴子已经被作者于2015/12/10 13:14:30编辑过]

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


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
  发帖心情 Post By:2015/12/10 15:18:00 [显示全部帖子]

漂亮!这个写法太简洁了,我以前好多的代码搞复杂了,回头去好好改改,谢谢大红袍老师!


 回到顶部