以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教如何停止计算死亡人员的年龄呢?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=147355)

--  作者:小小鸟
--  发布时间:2020/3/14 18:03:00
--  请教如何停止计算死亡人员的年龄呢?

各位老师,大家下午好!我是复制下面的代码(感谢提供代码的老师)自动提取人员信息表中的性别、出生日期和年龄的,但是有些人死亡了,我想让死亡的人员年龄在死亡当日自动停止计算(或者说就计算到死亡当日),请问一下我该怎样增加代码进去呢?感谢老师的指导。



此主题相关图片如下:截图.png
按此在新窗口浏览图片


If e .DataCol . Name = "身份证号码" Then \'如果更改的是身份证号码列

    If e .DataRow . IsNull( "身份证号码" ) Then \'身份证号码是否为空

        e .DataRow ( "出生日期" ) = Nothing \'如果为空,则清除出生日期

        e .DataRow ( "性别") = Nothing

    Else

        \'否则从身份证号码列中提取出生日期

        e .DataRow ( "出生日期" ) = ReadBirthday ( e. DataRow ("身份证号码" ))

        e .DataRow ( "性别") = ReadSex (e .DataRow ( "身份证号码" ))

    End If

End If

 

If e.DataCol.name = "出生日期" Then \'如果更改的是出生日期列

    If e.DataRow.IsNull("出生日期") Then \'出生日期是否为空

        e.DataRow("年龄") = Nothing \'如果为空,则清除年龄

    Else

        \'否则从出生日期列中提取出年龄

        Dim n As Integer= Date.Today.Year - e.DataRow("出生日期").Year

        If e.DataRow("出生日期").AddMonths(n*12) > Date.Today Then

            n = n -1

        End If

        e.DataRow("年龄") = n

    End If

End If

[此贴子已经被作者于2020/3/14 18:03:31编辑过]

--  作者:程兴刚
--  发布时间:2020/3/14 18:04:00
--  
没有辅助列,停止不了,看另一个帖子对您的回复!
--  作者:小小鸟
--  发布时间:2020/3/14 18:07:00
--  
感谢您的回答,那我需要怎么做?要增加辅助列吗?
--  作者:程兴刚
--  发布时间:2020/3/14 18:40:00
--  
增加辅助列,可选值:正常|注销,列属性禁止手动输入,默认值为正常,对已经走了的人,手工选择为注销,计算年龄代码加一层判断嵌套其中:
……
if e.datarow("辅助列") = "正常"
    ……计算年龄代码
end if 

这样做,注销身份证号码的人,就不会再计算年龄了!
记得前几天回过一帖,不知怎么的,没找到,忘记了是哪个帖子!

--  作者:小小鸟
--  发布时间:2020/3/15 16:36:00
--  
非常感谢老师的解答!
狐爸真是个大善人,发明了这么好的东西让我们大家应用。
[此贴子已经被作者于2020/3/15 16:39:58编辑过]

--  作者:小小鸟
--  发布时间:2020/3/15 17:06:00
--  
老师,我是小白,一点概念都没有,只是依葫芦画瓢,我把您给的代码换了几个地方,在如下的代码中,现在可以实现您说的效果了,但是还有一个问题,我需要死亡人员的年龄停留在死亡时间的那一天,而不是我手动输入“注销”的那一天,可以实现吗?感谢老师百忙之中指导。


If e .DataCol . Name = "身份证号码" Then \'如果更改的是身份证号码列
    If e .DataRow . IsNull( "身份证号码" ) Then \'身份证号码是否为空
        e .DataRow ( "出生日期" ) = Nothing \'如果为空,则清除出生日期
        e .DataRow ( "性别") = Nothing
    Else
        \'否则从身份证号码列中提取出生日期
        e .DataRow ( "出生日期" ) = ReadBirthday ( e. DataRow ("身份证号码" ))
        e .DataRow ( "性别") = ReadSex (e .DataRow ( "身份证号码" ))
    End If
End If

If e.DataCol.name = "出生日期" Then \'如果更改的是出生日期列
    If e.DataRow.IsNull("出生日期") Then \'出生日期是否为空
        e.DataRow("年龄") = Nothing \'如果为空,则清除年龄        
    Else \'否则从出生日期列中提取出年龄
       If e.DataRow("信息状态") = "正常"
        Dim n As Integer= Date.Today.Year - e.DataRow("出生日期").Year
            If e.DataRow("出生日期").AddMonths(n*12) > Date.Today Then
                n = n -1
            End If        
            e.DataRow("年龄") = n
        End If
    End If
End If
[此贴子已经被作者于2020/3/15 17:39:05编辑过]

--  作者:有点蓝
--  发布时间:2020/3/15 22:33:00
--  
直接判断死亡事件是否有值即可,如果有值取死亡时间,否则取当前时间

If e.DataCol.name = "出生日期" orelse e.DataCol.name = "死亡时间" Then \'如果更改的是出生日期列
    If e.DataRow.IsNull("出生日期") Then \'出生日期是否为空
        e.DataRow("年龄") = Nothing \'如果为空,则清除年龄
    Else \'否则从出生日期列中提取出年龄
        Dim d As Date = Date.Today
        If e.DataRow.isnull("死亡时间") = False
            d = e.DataRow("死亡时间")
        End If
        Dim n As Integer= d.Year - e.DataRow("出生日期").Year
        If e.DataRow("出生日期").AddMonths(n*12) > d Then
            n = n -1
        End If
        e.DataRow("年龄") = n
    End If
End If
[此贴子已经被作者于2020/3/15 22:34:06编辑过]

--  作者:小小鸟
--  发布时间:2020/3/17 17:22:00
--  
太感谢了,问题已经解决了!