以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]请帮助优化代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=178099)

--  作者:沪上游客
--  发布时间:2022/6/17 19:56:00
--  [求助]请帮助优化代码
老师你好,以下代码执行正确,但速度有点慢,总觉得可以优化一下,但不知道怎么优化。请老师指教为感!
Dim st As Date = Date.Now()
Dim drs As List(of DataRow) = DataTables("窗口1_Table7").Select("应付款余额 > 0 and 类别 = \'收票\' and 付款到期日期 <= \'" & Date.Today & "\'", "支出合同编号,付款到期日期")

For i As Integer = 0 To drs.Count - 1
    Dim zcje As Decimal \'定义支出合计数
    Dim zccqkp As Decimal \'定义超期开票数
    zcje = DataTables("窗口1_Table7").SQLCompute("Sum(金额)","支出合同编号 = \'" & drs(i)("支出合同编号") & "\'And [类别] = \'支出\'")
    zccqkp = DataTables("窗口1_Table7").Compute("Sum(金额)","支出合同编号 = \'" & drs(i)("支出合同编号") & "\'And [类别] = \'收票\' And 付款到期日期 <= \'" & drs(i)("付款到期日期") & "\'")
    If zcje < zccqkp Then
        drs(i)("付款是否超期") = "已超期"
    Else
        drs(i)("付款是否超期") = Nothing
    End If
Next
DataTables("窗口1_Table7").Save()
MessageBox.Show("执行时间:" & (Date.Now - st).TotalSeconds)


--  作者:有点蓝
--  发布时间:2022/6/18 8:51:00
--  
建议到datacolchanged事件,当类别,日期,金额发上变化的时候实时计算。这样改一行数据就计算一次,不用一次计算那么多行数据了

这个代码我看不出优化的余地,可能我不理解您的业务逻辑吧。

如果数据全部加载了,把SQLCompute改为Compute


--  作者:沪上游客
--  发布时间:2022/6/18 16:03:00
--  
谢谢老师的大力支持!
这个代码是我设置在后台服务器上的,频率为每个星期日凌晨1点执行一次,主要作用为标注我公司超过两年或以上的应付款,也就是这个窗口表执行标注完成后,再标注其关联主表(也是窗口表,用代码关联,计算此表对应的行数,如果行数大于0,关联记录标注已超期)。然后工作端能查询到。工作端结果如下图:
您建议的是应该在工作端上设置,我已做好了增加或修改时执行单条记录,但我忘记了修改日期后同样要执行,谢谢蓝老师提醒!!

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20220618155856.jpg
图片点击可在新窗口打开查看


[此贴子已经被作者于2022/6/18 16:08:09编辑过]