以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据重复的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78644)

--  作者:newsun2k
--  发布时间: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找不到?
另外,我发现如果不点保存,而是点了筛选树,重新筛选,会自动保存上一次的编辑过的数据。
该重复偶然出现,操作者当时的操作我已经无法获知,这让我崩溃。
压力很大。
请帮忙想想原因和解决方案。
例子是实在没有办法做了


--  作者:大红袍
--  发布时间:2015/12/14 12:09:00
--  

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

 

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


--  作者:e-png
--  发布时间:2015/12/14 12:14:00
--  
判断编码是否重复,应该在afteredit事件中来判断更好吧。
--  作者:newsun2k
--  发布时间:2015/12/14 12:40:00
--  
不是,我这个编码是读入的。
有一个xml文件,从里面读入的。
这个xml文件是从政府部门过来的,本身不可能重复

--  作者:newsun2k
--  发布时间: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条。

--  作者:大红袍
--  发布时间:2015/12/14 14:50:00
--  

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


--  作者:newsun2k
--  发布时间:2015/12/14 15:53:00
--  
msgbox没法加了,因为他们录了好几百条才出了3条错误。
只能在数据库里面加一个不重复的索引。

--  作者:大红袍
--  发布时间:2015/12/14 16:01:00
--  

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