Foxtable(狐表)用户栏目专家坐堂 → [求助]请帮助优化代码


  共有4239人关注过本帖树形打印复制链接

主题:[求助]请帮助优化代码

帅哥哟,离线,有人找我吗?
沪上游客
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:266 积分:2144 威望:0 精华:0 注册:2012/3/28 16:49:00
[求助]请帮助优化代码  发帖心情 Post By:2022/6/17 19:56:00 [只看该作者]

老师你好,以下代码执行正确,但速度有点慢,总觉得可以优化一下,但不知道怎么优化。请老师指教为感!
Dim st As Date = Date.Now()
Dim drs As List(of DataRow) = DataTables("窗口1_Table7").Select("应付款余额 > 0 and 类别 = '收piao' and 付款到期日期 <= '" & Date.Today & "'", "支出合同编号,付款到期日期")

For i As Integer = 0 To drs.Count - 1
    Dim zcje As Decimal '定义支出合计数
    Dim zccqkp As Decimal '定义超期开piao数
    zcje = DataTables("窗口1_Table7").SQLCompute("Sum(金额)","支出合同编号 = '" & drs(i)("支出合同编号") & "'And [类别] = '支出'")
    zccqkp = DataTables("窗口1_Table7").Compute("Sum(金额)","支出合同编号 = '" & drs(i)("支出合同编号") & "'And [类别] = '收piao' 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)


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106674 积分:542559 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/18 8:51:00 [只看该作者]

建议到datacolchanged事件,当类别,日期,金额发上变化的时候实时计算。这样改一行数据就计算一次,不用一次计算那么多行数据了

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
沪上游客
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:266 积分:2144 威望:0 精华:0 注册:2012/3/28 16:49:00
  发帖心情 Post By:2022/6/18 16:03:00 [只看该作者]

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

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


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

 回到顶部