Foxtable(狐表)用户栏目专家坐堂 → 禁止输入重复值


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

主题:禁止输入重复值

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


加好友 发短信
等级:幼狐 帖子:83 积分:912 威望:0 精华:0 注册:2019/9/20 14:29:00
禁止输入重复值  发帖心情 Post By:2020/4/14 10:57:00 [只看该作者]

使用的是外部数据源,后台储存有非常多的序列号,如果用代码一次性输入一万个序列号,并且用以下代码和后台进行比对数据需要非常久才能比对完成,
问题1:是否有什么方法极大减少比对时间?
问题2:如果发现有重复序列号如何实现取消这一万个序列号的输入?
        Dim dr As DataRow
        dr = e.DataTable.SQLFind("序列号 = '" & e.NewValue & "'")
        If dr IsNot Nothing Then
            MessageBox.Show("序列号:" & "'" & e.NewValue & "'" & "已经存在!")
            e.Cancel = True
        End If

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


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/14 11:17:00 [只看该作者]

一万个序列号,加上第一个是100001,最后一个是110000,那么到数据库里查询是否有中间区间的号码

dim dr as datarow = datatables("A").sqlfind("序号 >= 100001 and 序号 <= 110000")
if dr isnot nothing then
msgbox(“有重复序列号”)
else
‘添加序列号’
end if

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


加好友 发短信
等级:幼狐 帖子:83 积分:912 威望:0 精华:0 注册:2019/9/20 14:29:00
  发帖心情 Post By:2020/4/14 11:34:00 [只看该作者]

但是产品序列号不是纯数字的,格式如下:
FR40CAD0099

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


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/14 11:55:00 [只看该作者]

文字一样可以比较,前提是序号是连续的。如果序号没有规律那就没有办法。建议到存储过程里使用sql处理:添加一个临时表,把序号先生成出来,然后使用sql关联查询。

或者直接取数据库里的最大编号,在最大编号基础上新增编号,就不会重复了

 回到顶部