以文本方式查看主题 - 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 -- 请教如何停止计算死亡人员的年龄呢? 各位老师,大家下午好!我是复制下面的代码(感谢提供代码的老师)自动提取人员信息表中的性别、出生日期和年龄的,但是有些人死亡了,我想让死亡的人员年龄在死亡当日自动停止计算(或者说就计算到死亡当日),请问一下我该怎样增加代码进去呢?感谢老师的指导。 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 -- 太感谢了,问题已经解决了! |