以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于身份证自动提取信息发现的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=103371)

--  作者:富春居士
--  发布时间:2017/7/6 16:55:00
--  关于身份证自动提取信息发现的问题
狐爸:在制作员工信息表的时候,我在表DatacolChanged里面根据帮助文件输入了一下代码,方便从身份证号码里提取出生日期,性别,籍贯等信息,
If e.DataCol.Name = "身份证号码" Then
    If e.DataRow.IsNull("身份证号码") Then 
        e.DataRow("出生日期") = Nothing Or  e.DataRow("性别") = Nothing 
    Else        
        e.DataRow("出生日期") = ReadBirthday(e.DataRow("身份证号码"))
        e.DataRow("性别")=ReadSex(e.DataRow("身份证号码"))
    End If
ElseIf e.DataCol.Name = "出生日期" Then
    If e.DataRow.IsNull("出生日期") Then 
        e.DataRow("年龄") = Nothing 
    Else
        e.DataRow("年龄") = Date.Today.Year - e.DataRow("出生日期").Year
    End If
-------------------------------------------------------------------------------
Select Case e.DataCol.name
    Case "身份证号码"
        If e.DataRow.IsNull("身份证号码") Then
            e.DataRow("籍贯") = Nothing
        Else
            Dim bm As String = e.DataRow("身份证号码").SubString(0,6)
            Dim jg As DataRow = DataTables("身份证籍贯编码").Find("籍贯编码 = \'" & bm & "\'")
            If jg IsNot Nothing Then
                e.DataRow("籍贯") = jg("籍贯")
            End If
        End If
End Select
(因为是分部找到的代码,所以是分开输入的)

但是如果我把身份证号码删掉(比如想重置列以便更新数据)的时候会出现报错
               错误所在事件:表,基本信息,DataColChanged
               详细错误信息:
               调用的目标发生了异常。
               从类型“Boolean”到类型“Date”的转换无效。
这是怎么回事?是否代码需要改进?
希望能给小白指导一下,谢谢!

--  作者:有点甜
--  发布时间:2017/7/6 17:25:00
--  
Select Case e.DataCol.name
    Case "身份证号码"
        If e.DataRow.IsNull("身份证号码") Then
            e.DataRow("出生日期") = Nothing
            e.DataRow("性别") = Nothing
            e.DataRow("籍贯") = Nothing
        Else
            e.DataRow("出生日期") = ReadBirthday(e.DataRow("身份证号码"))
            e.DataRow("性别")=ReadSex(e.DataRow("身份证号码"))
           
            Dim bm As String = e.DataRow("身份证号码").SubString(0,6)
            Dim jg As DataRow = DataTables("身份证籍贯编码").Find("籍贯编码 = \'" & bm & "\'")
            If jg IsNot Nothing Then
                e.DataRow("籍贯") = jg("籍贯")
            End If
        End If
    Case "出生日期"
        If e.DataRow.IsNull("出生日期") Then
            e.DataRow("年龄") = Nothing
        Else
            e.DataRow("年龄") = Date.Today.Year - e.DataRow("出生日期").Year
        End If
End Select

--  作者:富春居士
--  发布时间:2017/7/7 7:49:00
--  
非常感谢,不但帮我把问题解决了,还把代码理清爽多了,试了一下,完美解决。就是不知道之前我的代码哪里出了问题。
--  作者:有点甜
--  发布时间:2017/7/7 8:32:00
--  
以下是引用富春居士在2017/7/7 7:49:00的发言:
非常感谢,不但帮我把问题解决了,还把代码理清爽多了,试了一下,完美解决。就是不知道之前我的代码哪里出了问题。

 

这句代码

 

e.DataRow("出生日期") = Nothing Or  e.DataRow("性别") = Nothing 

 

改成

 

e.DataRow("出生日期") = Nothing 

e.DataRow("性别") = Nothing