Foxtable(狐表)用户栏目专家坐堂 → [求助]重复值


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

主题:[求助]重复值

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


加好友 发短信
等级:小狐 帖子:316 积分:2193 威望:0 精华:0 注册:2018/2/4 9:37:00
[求助]重复值  发帖心情 Post By:2018/5/8 9:04:00 [只看该作者]

现在有   日期和姓名  2列    希望同一日期的情况下  姓名只能输入一次  不能重复输入
比如  如果日期是2018-05-08   那么相同的姓名  在这天只能输入一次   就像是考勤一天只能考一次那个意思


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/8 9:25:00 [只看该作者]


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


加好友 发短信
等级:小狐 帖子:316 积分:2193 威望:0 精华:0 注册:2018/2/4 9:37:00
  发帖心情 Post By:2018/5/8 9:37:00 [只看该作者]

我这个要求要复杂     日期每天都在变    姓名很多  也不是每天都固定的   这个例子  我实在是想不到怎么改   

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/5/8 10:20:00 [只看该作者]

能认认真真看帮助文档吗?

 

 

禁止多列输入重复值

假定产品表有型号和规格两列,禁止输入型号和规格相同的产品,可以将这个表的DataColChanging事件代码设置为:

Select Case e.DataCol.name
    Case "型号","规格"
        Dim xh As String
        Dim gg As String
        If e.DataCol.Name= "型号" Then
            xh = e.NewValue
            gg = e.DataRow("规格")
        Else
            gg = e.NewValue
            xh = e.DataRow("型号")
        End If
        If xh > "" AndAlso gg  > "" Then
            Dim dr As DataRow = e.DataRow
            If e.DataTable.Find("型号 = '" & xh & "' And 规格 = '" & gg & "'") IsNot Nothing Then
                MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.Cancel = True
            End If
        End If
End Select

上面的代码有点繁琐。

我们可以变通一下,改为DataColChanged事件事件代码,同样可以禁止输入型号和规格相同的行,而且代码会简洁一些:

Select Case e.DataCol.name
    Case "型号","规格"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("型号") = False AndAlso dr.IsNull("规格") = False Then
            If e.DataTable.Compute("Count([_Identify])","型号 = '" & dr("型号") & "' And 规格 = '" & dr("规格") & "'") > 1 Then
                MessageBox.Show("已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.DataRow(e.DataCol.Name) = e.OldValue '取消输入
            End If
        End If
End Select

不过两者还是有所差别的,DataColChanging是在值发生变化前进行判断,属于提前拦截,而DataColChanged是在值发生变化后判断,属于事后弥补。

 


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


加好友 发短信
等级:小狐 帖子:316 积分:2193 威望:0 精华:0 注册:2018/2/4 9:37:00
  发帖心情 Post By:2018/5/8 22:08:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:重复_201805082159.zip

甜老师  不知道是我表达的不清楚还是我理解不了   我做了一个实例  你看看     是一个汇报的记录

每一天只希望同一个姓名只能输入一次  因为有个别人可能有几次汇报记录   防止给添加重复了  


 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105478 积分:536381 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/8 22:39:00 [只看该作者]

一样的用法。看帮助最主要的是看代码的处理逻辑,而不是照抄代码,4楼的代码改改列名就可以了,日期比较特殊,活用一下

DataColChanged事件

Select Case e.DataCol.name
    Case "日期","姓名"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("日期") = False AndAlso dr.IsNull("姓名") = False Then
            Dim d As Date = dr("日期").Date
            If e.DataTable.Compute("Count([_Identify])","日期 >= '" & d & "' and 日期 < '" & d.AddDays(1) & "' And 姓名 = '" & dr("姓名") & "'") > 1 Then
                MessageBox.Show("已经存在相同日期和姓名的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.DataRow(e.DataCol.Name) = e.OldValue '取消输入
            End If
        End If
End Select


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


加好友 发短信
等级:小狐 帖子:316 积分:2193 威望:0 精华:0 注册:2018/2/4 9:37:00
  发帖心情 Post By:2018/5/8 22:48:00 [只看该作者]

谢谢老师   我就是不知道怎么判断时间    基本功不扎实   我也不是专门开发这个  至少现在没有太多的时间仔细学习   
软件还要尽快完善    所以有时候的问题很笨

 回到顶部