以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  麻烦高手帮我看下这个表事件  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=66609)

--  作者:ydhcz2009
--  发布时间: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
--  发布时间: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
--  发布时间:2015/4/11 11:03:00
--  
谢谢。我想达到的效果是,一个员工编号,必须只能跟一个身份证号码配对。所以输入新的行记录里的身份证列的时候,发现这个身份证的值在以往记录里已有的对应于新记录里的员工编号没有配对,就禁止输入
--  作者:Bin
--  发布时间:2015/4/11 11:05:00
--  
看2楼代码
--  作者:菲舍尔
--  发布时间:2015/4/11 12:01:00
--  

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

 


--  作者:ydhcz2009
--  发布时间:2015/4/11 12:22:00
--  
我这个表格想要的结果是,可以允许身份证号和员工编号都重复,但要求:只要第一次填员工编号,对应了唯一的一个身份证号后,那以后重复填的时候,也必须按第一次的填法对应
--  作者:ydhcz2009
--  发布时间: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
--  发布时间:2015/4/11 13:45:00
--  
用2楼的代码没可以的,或者直接FIND 
.find("人员编号" = e.DataRow("人员编号") & "and 身份证=\'" & e.newValue &"\'")


搞不定就上例子吧

--  作者:菲舍尔
--  发布时间: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

 

 

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