以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  datacolchanged事件出现数据重复提取的原因?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169407)

--  作者:happyft
--  发布时间:2021/6/15 15:44:00
--  datacolchanged事件出现数据重复提取的原因?
Dim cmd As New SQLCommand 
Dim dt As DataTable
cmd.ConnectionName = Mydata
Dim edr As DataRow = e.DataRow
Dim tbl As Table = Tables("销售出库单_明细")

Select Case e.DataCol.name
    Case "出货日期","分类"
        If edr.IsNull("出货日期") = False AndAlso edr.IsNull("分类") = False Then
            cmd.CommandText = "SELECT * From dbo.ufn_xsck(\'" & edr("分类") & "\',\'" & edr("出货日期") & "\')"
            dt = cmd.ExecuteReader
            If dt.DataRows.count > 0 Then
                tbl.StopRedraw
                For Each dr As DataRow In dt.DataRows
                    Dim r As Row = tbl.AddNew()
                    r("产品编码") = dr("产品编码")
                    r("品名") = dr("品名")
                    r("规格") = dr("规格")
                    r("数量") = dr("数量") - dr("累计出货")
                Next
                tbl.ResumeRedraw
            End If
        End If
End Select
如上面的代码是写在主表的datacolchanged事件中的,但有时用户在操作时会出现重复提取两次数据导致明细表中的数据重复,
请问一下是什么情况下才可能导致这种现象(1个月会出现一两次)
谢谢!

--  作者:有点蓝
--  发布时间:2021/6/15 15:51:00
--  
"出货日期","分类"2个列只要数据变更就会执行事件,然后代码执行,只要sql查询有结果就会新增。可以考虑加上查重处理,使用find先查询是否已有数据再新增
--  作者:HappyFt
--  发布时间:2021/6/15 16:18:00
--  
问题是一次操作出现的,两列都是要人为下拉选择的,用户先选择了出货日期,再选择分类才会触发,而且重复的数据都是相同日期及分类的,如果用户就算点击鼠标比较快点击了两次相同的分类,但分类值没改变应该不会触发执行吧?
--  作者:有点蓝
--  发布时间:2021/6/15 16:31:00
--  
datacolchanged事件还有没有其它代码?给Tables("销售出库单_明细")单元格赋值后会不会又触发其它代码?

也许是先选择分类,再选择日期呢

--  作者:HappyFt
--  发布时间:2021/6/16 9:00:00
--  
没有其他代码了,先选择分类,再选择日期道理是一样的,两次选择相同的日期应该也不会触发吧,因为重复的数据都是相同分类,相同日期的,
现在是一月偶尔出现一两次,我测试也未重现,也不知道是怎么导致的

--  作者:有点蓝
--  发布时间:2021/6/16 9:28:00
--  
代码不是看不出什么问题。这种情况应该是刚好触发了其它什么事件互相影响导致的。这种要自己分析找到规律了,比如:哪个用户,哪台电脑操作的,能否从触发的数据,以及和这台数据有关的其它数据,之前之后增加的数据找到什么特点和规律......