以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]公式列根据身份证号码列读出性别? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100883) |
||||
-- 作者:老鼠 -- 发布时间:2017/5/20 9:45:00 -- [求助]公式列根据身份证号码列读出性别? 刚开始学习使用foxtable就遇到问题:如题所示iif(len(A3) >= 17, iif(convert(substring(A3, 17, 1),\'System.Int64\') % 2 = 1, \'男\', \'女\'), null)这是我在网上搜到的,当然还有这个帮助文件里的:Dim Identify As String = "410110197109172433" Dim Sex As String = ReadSex(Identify) Output.Show(Sex)但结果都不能满足我的要求.第一个公式无法判定身份号码是否正确,过去的老身份证号码也无法读取结果.帮助里的提示:"Identify"提示运算符后缺少操作数.请大家帮忙解决下. |
||||
-- 作者:有点蓝 -- 发布时间:2017/5/20 9:57:00 -- 前面一段是表达式,后面一段是代码,使用的地方不一样,不要混淆了 到命令窗口执行下面代码 Dim Identify As String = "410110197109172433" If ValidPIN(Identify) Then Dim Sex As String = ReadSex(Identify) msgbox(Sex) Else msgbox("错误的身份证号") End If |
||||
-- 作者:老鼠 -- 发布时间:2017/5/20 16:06:00 -- 此主题相关图片如下:1.png 也不知道对不对,但操作时没有作用.请版主给学习方向与指导. [此贴子已经被作者于2017/5/20 16:07:06编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2017/5/20 16:16:00 -- 基础数据表的DataColChanged事件 If e.DataCol.Name = "公民身份号码" Then \'如果更改的是身份证号码列 If e.DataRow.IsNull("公民身份号码") Then \'身份证号码是否为空 e.DataRow("性别") = Nothing Else e.DataRow("性别") = ReadSex(e.DataRow("公民身份号码")) End If End If |
||||
-- 作者:老鼠 -- 发布时间:2017/5/20 17:08:00 --
这个公民身份号码是A3列,性别是A4列其中A4是公式列. [此贴子已经被作者于2017/5/20 17:09:22编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2017/5/20 17:11:00 -- 确实没有进入状态。 您只是改了默认的3个表的列标题吧。建议连列名称和表名称都改掉吧。否则以后很多麻烦的 |
||||
-- 作者:老鼠 -- 发布时间:2017/5/20 17:26:00 -- 此主题相关图片如下:6.png
这些我都看了,就是不知道为什么会这样呢?能给具体点吗?求解答. 此主题相关图片如下:7.png [此贴子已经被作者于2017/5/20 17:27:56编辑过]
|
||||
-- 作者:yinyb36 -- 发布时间:2017/5/21 9:25:00 -- A4列为表达式列,需改为数据列,执行 DataColChanged事件 [此贴子已经被作者于2017/5/21 9:38:23编辑过]
|
||||
-- 作者:老鼠 -- 发布时间:2017/5/21 10:41:00 -- 谢谢!A4列改成数据列后没有再报错了.那能再请问下这个事件与计算公式的区别吗?为什么表事件就能达到这个效果呢? |
||||
-- 作者:yinyb36 -- 发布时间:2017/5/21 17:31:00 -- 表达式的优点是计算速度快,不占储存
缺点是函数少,局限性大 数据列的优点是计算灵活
缺点是代码不严谨容易出错
计算速度没有表达式快
代码的质量影响计算速度
|