以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  优化代码求指教!  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=63312)

--  作者:lisheng7177
--  发布时间:2015/1/18 16:37:00
--  优化代码求指教!

Select e.DataCol.Name
    Case "鉴定等级","原技术资格等级","原等级取得时间","身份证号码","原资格证书编号"
        e.DataRow("是否合格") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("原技术资格等级") = "助理工程师(电力类)" AndAlso Cdate(e.DataRow("原等级取得时间")).Year <= Date.Today.Year - 4)
        e.DataRow("是否合格") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("原技术资格等级") = "工程师(电力类)")
        e.DataRow("是否合格") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("原技术资格等级") = "助理工程师(工业工程)" AndAlso Cdate(e.DataRow("原等级取得时间")).Year <= Date.Today.Year - 4)
        e.DataRow("是否合格") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("原技术资格等级") = "工程师(工业工程)")
        e.DataRow("是否合格") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("原技术资格等级") = "高级工程师(电力类)")
        e.DataRow("是否合格") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("原技术资格等级") = "高级工程师(工业工程)")
        e.DataRow("是否合格") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("原技术资格等级") = "高级工" AndAlso Cdate(e.DataRow("原等级取得时间")).Year <= Date.Today.Year - 3) AndAlso Dim fdr As DataRow = DataTables("证书编号表").Find("身份证号码 = \'" & e.DataRow("身份证号码") & "\' And 申报鉴定工种 = \'" & e.DataRow("申报鉴定工种") & "\' And 证书编号 = \'" & e.DataRow("原资格证书编号") & "\' )
       
       
End Select

请教版主这段判断代码是否可能选择这样的形式写?如行,那么每句之间该用哪个代码连接,我用了OR、ORELSE、ELSE都提示语法错误?

“报名登记表”里有"鉴定等级","原技术资格等级","原等级取得时间","身份证号码","原资格证书编号"等列,另有“证书编号表”有“证书编号”,“身份证号码”,“申报鉴定工种”等列

在报名登记表里的“鉴定等级”列都是“技师,判断条件如下:

1、原技术资格等级=高级工,且原等级取得时间≥3、原资格证书编号=“证书编号表”的证书编号(为证明是同1人所有,加入两表之间身份证号码、申报鉴定工种的判断),如都满足,则“合格”;

2、原技术资格等级="工程师(电力类)"、"工程师(工业工程)"、"高级工程师(电力类)"、"高级工程师(工业工程)",则“合格”;

3、原技术资格等级="助理工程师(电力类)" 或"助理工程师(工业工程)" ,且原等级取得时间≥4,则“合格”。

以上3条只要符合其中1条,则该员工符合报名条件。

 

请版主指教!


--  作者:lisheng7177
--  发布时间:2015/1/18 16:42:00
--  

之所以会这样想是因为发现如我更改表中的条件时,即使我让某员工全部符合条件或不符合条件,在“是否合格”列没有变化;另外也是受下面这段代码的启发,想把代码写简洁点,因为我还有“中级工”、“高级工”的代码要加进去,如用IF条件写,那代码会很复杂……

Select e.DataCol.Name
    Case "鉴定等级","申报性质","是否合格"
        e.DataRow("理论考否") = (e.DataRow("鉴定等级") = "技师" AndAlso e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("是否合格") = True)
End Select


--  作者:有点甜
--  发布时间:2015/1/18 16:45:00
--  

If e.DataRow("鉴定等级") = "技师" Then
    If e.DataRow("原技术资格等级") = "助理工程师(电力类)" AndAlso Cdate(e.DataRow("原等级取得时间")).Year <= Date.Today.Year - 4 Then
       
        e.DataRow("是否合格") = True
       
    Else If e.DataRow("原技术资格等级") = "工程师(电力类)"
       
        e.DataRow("是否合格") = True
       
    Else If e.DataRow("原技术资格等级") = "助理工程师(工业工程)" AndAlso Cdate(e.DataRow("原等级取得时间")).Year <= Date.Today.Year - 4 Then
       
        e.DataRow("是否合格") = True
       
    Else If e.DataRow("原技术资格等级") = "工程师(工业工程)"
       
        e.DataRow("是否合格") = True
       
    Else If e.DataRow("原技术资格等级") = "高级工程师(电力类)"
       
        e.DataRow("是否合格") = True
       
    Else If e.DataRow("原技术资格等级") = "高级工程师(工业工程)"
       
        e.DataRow("是否合格") = True
       
    Else If e.DataRow("原技术资格等级") = "高级工" AndAlso Cdate(e.DataRow("原等级取得时间")).Year <= Date.Today.Year - 3
        Dim fdr As DataRow = DataTables("证书编号表").Find("身份证号码 = \'" & e.DataRow("身份证号码") & "\' And 申报鉴定工种 = \'" & e.DataRow("申报鉴定工种") & "\' And 证书编号 = \'" & e.DataRow("原资格证书编号") & "\'")
       
        e.DataRow("是否合格") = fdr IsNot Nothing
       
    Else
       
        e.DataRow("是否合格") = False
       
    End If
   
End If


--  作者:lisheng7177
--  发布时间:2015/1/18 17:04:00
--  

谢谢甜版指教!现在可以做到随时变动了。另外代码的行之间是不是有规定格式,要有空行?


--  作者:有点甜
--  发布时间:2015/1/18 17:05:00
--  
 不是,空行可以删掉
--  作者:lisheng7177
--  发布时间:2015/1/18 17:06:00
--  
图片点击可在新窗口打开查看谢谢甜版!