Foxtable(狐表)用户栏目专家坐堂 → 麻烦高手帮我看下这个表事件


  共有5400人关注过本帖树形打印复制链接

主题:麻烦高手帮我看下这个表事件

帅哥哟,离线,有人找我吗?
ydhcz2009
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:64 积分:1039 威望:0 精华:0 注册:2012/4/5 9:35:00
麻烦高手帮我看下这个表事件  发帖心情 Post By:2015/4/10 13:45:00 [只看该作者]

我想达到的目的是“人员编号”列和“身份证号”列要一一对应。就是说,一个人员编号,只能有一个身份证号去匹配。在新的记录中,如果输入了人员编号后,再输入身份证号的时候,检索以前的记录,如发现已有的记录里有相应的人员编号和身份证编号对应行,就拦截输入。下面是代码,在DataColchanging事件中。但不起作用,请高手帮我看一下:

企业人员基本信息表_DataColChanging

 

If e.DataCol.Name="身份证号" Then

    Dim dr As DataRow

    dr = DataTables("企业人员基本信息表").find("人员编号" = e.DataRow("人员编号"), "隶属关系变动时间 desc")

    If dr IsNot Nothing

        If e.NewValue<>dr("身份证号") Then

            MessageBox.Show("同一人员不能使用不同工号,请重新录入!")

            e.Cancel=True

        End If

    End If

End If



 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/10 13:50:00 [只看该作者]

If e.DataCol.Name="身份证号" Then

    Dim dr As DataRow

    dr = DataTables("企业人员基本信息表").find("人员编号" = e.DataRow("人员编号"))

    If dr IsNot Nothing

        If e.NewValue=dr("身份证号") Then

            MessageBox.Show("同一人员不能使用不同工号,请重新录入!")

            e.Cancel=True

        End If

    End If

End If


 回到顶部
帅哥哟,离线,有人找我吗?
ydhcz2009
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:64 积分:1039 威望:0 精华:0 注册:2012/4/5 9:35:00
  发帖心情 Post By:2015/4/11 11:03:00 [只看该作者]

谢谢。我想达到的效果是,一个员工编号,必须只能跟一个身份证号码配对。所以输入新的行记录里的身份证列的时候,发现这个身份证的值在以往记录里已有的对应于新记录里的员工编号没有配对,就禁止输入

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/11 11:05:00 [只看该作者]

看2楼代码

 回到顶部
帅哥哟,离线,有人找我吗?
菲舍尔
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:509 积分:3547 威望:0 精华:3 注册:2012/11/13 15:49:00
  发帖心情 Post By:2015/4/11 12:01:00 [只看该作者]

楼主的判断条件有问题,直接判断身份证号码是否重复就是了

 


 回到顶部
帅哥哟,离线,有人找我吗?
ydhcz2009
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:64 积分:1039 威望:0 精华:0 注册:2012/4/5 9:35:00
  发帖心情 Post By:2015/4/11 12:22:00 [只看该作者]

我这个表格想要的结果是,可以允许身份证号和员工编号都重复,但要求:只要第一次填员工编号,对应了唯一的一个身份证号后,那以后重复填的时候,也必须按第一次的填法对应

 回到顶部
帅哥哟,离线,有人找我吗?
ydhcz2009
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:64 积分:1039 威望:0 精华:0 注册:2012/4/5 9:35:00
  发帖心情 Post By:2015/4/11 12:32:00 [只看该作者]

If e.DataCol.Name = "身份证号" Then  '如果编辑的是身份证号列

    Dim dr As DataRow

    dr = e.DataTable.Find("人员编号"=e.DataRow("人员编号"))  '那么搜索以往记录中,与正在编辑的这条行的记录里面的人员编号相同的记录

    If dr IsNot Nothing   '如果有这样的记录

        If e.NewValue <> dr("身份证号") Then    '那么将正在输入的身份证号和上面检索到的记录中的身份证号对比,如果是不一样的

            MessageBox.Show("此人员编号已有使用记录,无法录入新的身份证号!"'弹出提示窗口

            e.Cancel = True  '则取消此次更改

        End If

    End If

End If


就是看不出错在哪里。不能用


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/4/11 13:45:00 [只看该作者]

用2楼的代码没可以的,或者直接FIND 
.find("人员编号" = e.DataRow("人员编号") & "and 身份证='" & e.newValue &"'")


搞不定就上例子吧

 回到顶部
帅哥哟,离线,有人找我吗?
菲舍尔
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:509 积分:3547 威望:0 精华:3 注册:2012/11/13 15:49:00
  发帖心情 Post By:2015/4/12 2:00:00 [只看该作者]

If e.DataCol.Name = "身份证号" Then  '如果编辑的是身份证号列

   if not e.datarow.isnull("人员编号") then

    Dim dr As DataRow

    dr = e.DataTable.Find("人员编号"=e.DataRow("人员编号"))  '那么搜索以往记录中,与正在编辑的这条行的记录里面的人员编号相同的记录

    If dr IsNot Nothing   '如果有这样的记录

        If e.NewValue <> dr("身份证号") Then    '那么将正在输入的身份证号和上面检索到的记录中的身份证号对比,如果是不一样的

            MessageBox.Show("此人员编号已有使用记录,无法录入新的身份证号!")  '弹出提示窗口

            e.Cancel = True  '则取消此次更改

        End If

    End If

   endif

End If

 

 

加多一个判断,人员编号不为空,才进行判断


 回到顶部