以文本方式查看主题 - 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,关联记录标注已超期)。然后工作端能查询到。工作端结果如下图: 您建议的是应该在工作端上设置,我已做好了增加或修改时执行单条记录,但我忘记了修改日期后同样要执行,谢谢蓝老师提醒!! [此贴子已经被作者于2022/6/18 16:08:09编辑过]
|