以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  甜老师,有时会重复加载好几天的数据, 帮看一下,谢谢  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128562)

--  作者:cyrollin
--  发布时间:2018/12/10 15:46:00
--  甜老师,有时会重复加载好几天的数据, 帮看一下,谢谢
甜老师,有时会 重复 加载好几天的数据, 帮看一下,谢谢

放在窗口 afterload 事件里面的: 

With DataTables("收款对账表")
    Dim dt2 As Date = DataTables("收款对账表").Compute("max(服务日期)")
    Dim dt3 As Date = Date.Today.adddays(1)
    
    If DataTables("收款对账表").Compute("max(服务日期)") = Date.Today()
        DataTables("收款对账表").load()
        Tables("收款对账表").Sort = "服务日期"
    Else
        Dim cmd As new SQLCommand
        cmd.C
        cmd.CommandText = "Select[_identify],编号,服务日期,客户信息,支付方式,服务内容,价格 Flom {表A} where 日期 > #" & dt2 & "# And 日期 < #" & dt3 & "#"
        Dim dt = cmd.ExecuteReader
        
       Tables("收款对账表").addnew(1)
        Dim i As Integer = 0
        Dim drt As Row
        For Each fdr As DataRow In dt.Select("支付方式 like \'月付%\'")
            If i = 0 Then
                drt = Tables("收款对账表").current
            Else
                drt = Tables("收款对账表").addnew(1)
            End If
            drt("编号") = fdr("编号")
            drt("客户信息") = fdr("客户信息")
            drt("支付方式") = fdr("支付方式")
            drt("服务内容") = fdr("服务内容")
            drt("服务日期") = fdr("服务日期")
            drt("价格") = fdr("价格")       
   
            i +=1
        Next
        
        DataTables("收款对账表").load()
        DataTables("收款对账表").save()
        Tables("收款对账表").Sort = "服务日期"
        
    End If
End With

现在的问题是, 收款对账表 已经有 到今天的数据, 但是打开运行后,又从表A里面加载了几天的数据包括今天的, 就重复了。
但是有时打开又不重复, 重复的情况一般是隔几天才打开,就会产生重复。
[此贴子已经被作者于2018/12/10 15:47:19编辑过]

--  作者:有点甜
--  发布时间:2018/12/10 16:41:00
--  

是【收款对账表】表的数据重复,还是【表A】的数据重复?

 

如果重复,是不是你重复执行了代码,重复添加了多次数据导致的?


--  作者:cyrollin
--  发布时间:2018/12/10 17:10:00
--  

是【收款对账表】表的数据重复,还是【表A】的数据重复?

收款对账表数据重复了, 表A里面没有重复的数据

 

如果重复,是不是你重复执行了代码,重复添加了多次数据导致的?

代码放在窗口的AFTERLOAD事件里面,每次打开窗口会执行一次。


像 这样的, 按照日期来的。 红色的数据就代表重复的。



此主题相关图片如下:微信图片_20181210170612.png
按此在新窗口浏览图片


--  作者:有点甜
--  发布时间:2018/12/10 17:58:00
--  
        For Each fdr As DataRow In dt.Select("支付方式 like \'月付%\'")
            If i = 0 Then
                drt = Tables("收款对账表").current
            Else
                drt = Tables("收款对账表").addnew(1)
            End If
            drt("编号") = fdr("编号")
            drt("客户信息") = fdr("客户信息")
            drt("支付方式") = fdr("支付方式")
            drt("服务内容") = fdr("服务内容")
            drt("服务日期") = fdr("服务日期")
            drt("价格") = fdr("价格")       
   
            i +=1
        Next
 
改成
 
For Each fdr As DataRow In dt.Select("支付方式 like \'月付%\'")
    Dim dr As DataRow = DataTables("收款对账表").Find("编号 = \'" & fdr("编号") & "\'")
    If dr Is Nothing Then
        dr = DataTables("收款对账表").addnew(1)
    End If
    dr("编号") = fdr("编号")
    dr("客户信息") = fdr("客户信息")
    dr("支付方式") = fdr("支付方式")
    dr("服务内容") = fdr("服务内容")
    dr("服务日期") = fdr("服务日期")
    dr("价格") = fdr("价格")
Next

--  作者:cyrollin
--  发布时间:2018/12/11 15:49:00
--  
我找到原因了, 原来出现重复的现象时,就是在窗口里面我用了 筛选, 比如当筛选出来的数据是前天的日期,在下次打开窗口的时候,他就会又加载一遍昨天和今天的数据。 
代码问题应该出现在这里:
With DataTables("收款对账表")
    Dim dt2 As Date = DataTables("收款对账表").Compute("max(服务日期)")   ‘但是我计算的是datatables里面的最大日期啊, 不是计算table里面的最大日期哦。
    Dim dt3 As Date = Date.Today.adddays(1)
    
    If DataTables("收款对账表").Compute("max(服务日期)") = Date.Today()
        DataTables("收款对账表").load()
        Tables("收款对账表").Sort = "服务日期"
    Else
        Dim cmd As new SQLCommand
        cmd.C
        cmd.CommandText = "Select[_identify],编号,服务日期,客户信息,支付方式,服务内容,价格 Flom {表A} where 日期 > #" & dt2 & "# And 日期 < #" & dt3 & "#"
        Dim dt = cmd.ExecuteReader

--  作者:有点甜
--  发布时间:2018/12/11 15:51:00
--  
认认真真看懂四楼,你重复添加了数据进去保存了啊,自然有问题。
--  作者:cyrollin
--  发布时间:2018/12/11 15:57:00
--  
没有, 打开窗口不是每次都会重复加载之前的数据,只有在筛选后才会重复加载。
我在beforeclose事件里面加上了 

datatables().loadfilter=""
datatables().load

就可以了。
It works now :)

--  作者:有点甜
--  发布时间:2018/12/11 16:07:00
--  
没看懂你表达的意思。如果下次还有问题,做个对应例子发上来测试。
--  作者:cyrollin
--  发布时间:2018/12/11 16:10:00
--  
好的 我下次再发现这个地方有问题,我就做上来。

谢谢甜老师, 辛苦了。图片点击可在新窗口打开查看

--  作者:cyrollin
--  发布时间:2018/12/13 15:16:00
--  
refer to this: http://www.foxtable.com/webhelp/scr/2897.htm



With DataTables("收款对账表")
    Dim dt2 As Date = DataTables("收款对账表").SQLCompute("max(服务日期)")     \'compute 改成SQLCompute就好了。
    Dim dt3 As Date = Date.Today.adddays(1)
    
    If DataTables("收款对账表").Compute("max(服务日期)") = Date.Today()
        DataTables("收款对账表").load()
        Tables("收款对账表").Sort = "服务日期"
    Else
...