以文本方式查看主题 - 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都没找到,然后就允许保存了。 |