Foxtable(狐表)用户栏目专家坐堂 → 数据重复的问题


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

主题:数据重复的问题

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


加好友 发短信
等级:六尾狐 帖子:1495 积分:11133 威望:0 精华:0 注册:2014/8/13 16:19:00
数据重复的问题  发帖心情 Post By:2015/12/14 11:58:00 [只看该作者]

我在菜单中设计一个保存按钮,执行
MainTable.DataTable.Save
在表的beforerowsaved事件中设置代码
    Dim dr As DataRow
If e.DataRow.RowState = DataRowstate.Added Then
'此处设监控点1
    dr = DataTables(当前表).SQLFind("编码 = '" & e.DataRow(“编码”) & "'")
    If dr IsNot Nothing Then
        MessageBox.show("编码[" & e.DataRow("编码") & "]已存在!","提示",MessageboxButtons.Ok,MessageboxIcon.Information)
        e.cancel = True
        Return
    End If
'此处设监控点2
end if
这样设计,我认为是不可能把相同编码的数据录入到数据库中。
实际情况是,有相同编码的数据被录入系统了。
我在监控点设置的监控发现,01秒时,该代码执行一次,50秒的时候,又执行了一次(两个监控点的代码都执行了)。
这会是什么情况导致的呢?难道第二次还是DataRowstate.Added状态?sqlFind找不到?
另外,我发现如果不点保存,而是点了筛选树,重新筛选,会自动保存上一次的编辑过的数据。
该重复偶然出现,操作者当时的操作我已经无法获知,这让我崩溃。
压力很大。
请帮忙想想原因和解决方案。
例子是实在没有办法做了


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/14 12:09:00 [只看该作者]

同时保存相同编码的时候,有可能导致重复的。

 

你的编码最后加上一个随机数或者_Identify,这样肯定不会重复


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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2015/12/14 12:14:00 [只看该作者]

判断编码是否重复,应该在afteredit事件中来判断更好吧。

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


加好友 发短信
等级:六尾狐 帖子:1495 积分:11133 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2015/12/14 12:40:00 [只看该作者]

不是,我这个编码是读入的。
有一个xml文件,从里面读入的。
这个xml文件是从政府部门过来的,本身不可能重复

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


加好友 发短信
等级:六尾狐 帖子:1495 积分:11133 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2015/12/14 12:43:00 [只看该作者]

袍哥,实际代码还有一点不同。
If e.DataRow.RowState = DataRowstate.Added Then
'此处设监控点1
    dr = DataTables(当前表).SQLFind("编码 = '" & e.DataRow(“编码”) & "'")
    If dr IsNot Nothing Then
        MessageBox.show("编码[" & e.DataRow("编码") & "]已存在!","提示",MessageboxButtons.Ok,MessageboxIcon.Information)
        e.cancel = True
        Return
    End If
'此处设监控点2
    此处调用函数,向其他表中新增一条数据。
end if
最后的结果,当前表的数据是一条,而其他表中的数据是2条。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/14 14:50:00 [只看该作者]

加入msgbox,看弹出多少次。一行保存,不可能无端执行两次的啊。


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


加好友 发短信
等级:六尾狐 帖子:1495 积分:11133 威望:0 精华:0 注册:2014/8/13 16:19:00
  发帖心情 Post By:2015/12/14 15:53:00 [只看该作者]

msgbox没法加了,因为他们录了好几百条才出了3条错误。
只能在数据库里面加一个不重复的索引。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/14 16:01:00 [只看该作者]

同时保存,就可能有重复问题。比如 编号0001,几个用户同时保存,sqlFind都没找到,然后就允许保存了。


 回到顶部