以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教对学历(文本)筛选的方法  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78353)

--  作者:zhangchi96
--  发布时间: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 = " 学历 = ‘高中’" ,希望结果是学历为高中或者中专的,又该如何修改?


--  作者:大红袍
--  发布时间:2015/12/7 21:44:00
--  

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

 

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

 

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


--  作者:zhangchi96
--  发布时间:2015/12/7 22:39:00
--  
也是,我想复杂了
--  作者:zhangchi96
--  发布时间: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编辑过]

--  作者:大红袍
--  发布时间:2015/12/7 23:29:00
--  

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

 

Select case sx2.Text

    case "大专", "本科"

        msgbox("大专以上")

    case "高中"

 

End Select


--  作者:zhangchi96
--  发布时间: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
--  发布时间: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




--  作者:大红袍
--  发布时间:2015/12/10 9:35:00
--  

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

 

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

--  作者:zhangchi96
--  发布时间:2015/12/10 11:51:00
--  
Filter = " [最高学历_学历] in (\'" & slt.Replace(",","\',\'") & "\')"))    

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

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

--  作者:大红袍
--  发布时间:2015/12/10 11:53:00
--  
Filter = " [最高学历_学历] in (\'" & slt.Replace(",","\',\'") & "\')"