Foxtable(狐表)用户栏目专家坐堂 → 如何提高替换数据的速度


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

主题:如何提高替换数据的速度

帅哥哟,离线,有人找我吗?
明天的灵
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
如何提高替换数据的速度  发帖心情 Post By:2022/12/25 14:36:00 [显示全部帖子]

在录入、修改客户信息的某个字段时,想同步到“出库主表”中。
目前采用客户信息表的“DataColChanged”事件来处理,代码如下:
SystemReady = False ‘出库主表有许多表达式列,暂停事件执行
。Try
For Each dr As DataRow In DataTables("出库主表").Select("订单客户 = '" & e.DataRow("订单客户") & "'")
    dr("结算日") = e.DataRow("结算日")
Next
Catch ex As Exception
    MessageBox.Show("更新数据失败") 
End Try
SystemReady = True ’恢复事件执行

目前“出库主表”约有32000行,发现执行一次数据更新,需要几分钟时间(与这个客户的出库主表记录数有关)。

请问,何种处理方法,才能提高更新速度?

[此贴子已经被作者于2022/12/25 17:29:26编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/25 18:16:00 [显示全部帖子]

已有判断列名。
还有,相同代码,在不建立表达式的数据库的测试项目中执行,所化时间基本为0.我怀疑是项目中表达式影响了给速度。


 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/25 21:39:00 [显示全部帖子]

我把出库主表及出库明细表的所有表达式都停了,速度还是提不高。感觉一进入这个操作,整个狐表程序暂停了。

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/25 23:12:00 [显示全部帖子]

因实际数据涉及工厂的商业信息,不好发到论坛上来。如可以的话,我可以通过QQ私下发,QQ:496058092

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/26 8:42:00 [显示全部帖子]

在执行客户信息表的“DataColChanged”事件时,已把系统事件SystemReady 停了,昨晚也把出库主表与出库明细表的所有表达式列停止,再去更新数据。还是会更新数据1分钟时间。


 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/26 9:22:00 [显示全部帖子]

Select Case e.DataCol.Name 
    Case "现金结帐"
        SystemReady = False '暂停执行事件代码
        Try
            Functions.Execute("stop_exp") '暂停表达式
            For Each dr As DataRow In DataTables("出库主表").Select("订单客户 = '" & e.DataRow("订货客户") & "'")
                dr("现金客户") = e.DataRow("现金结帐")
                'MessageBox.Show(e.DataRow("订货客户") & "  " &  e.DataRow(e.DataCol.Name) )
            Next
        Catch ex As Exception 
            MessageBox.Show("更新现金结帐失败") 
        End Try
        Functions.Execute("restore_exp")  '恢复表达式
        SystemReady = True '恢复执行事件代码
        MessageBox.Show("现金结帐状态修改完毕")
        
    Case "结算日"
        SystemReady = False '暂停执行事件代码
        Try
            '追加数据代码
            Functions.Execute("stop_exp")   ‘暂时取消表达式
            For Each dr As DataRow In DataTables("出库主表").Select("订单客户 = '" & e.DataRow("订货客户") & "'")
                dr("结算日") = e.DataRow("结算日")
            Next
        Catch ex As Exception
            MessageBox.Show("更新结算日失败") 
        End Try
        Functions.Execute("restore_exp")      ’恢复表达式
        SystemReady = True '恢复执行事件代码
        
        MessageBox.Show(e.DataRow("订货客户") & "  " & e.DataRow(e.DataCol.Name) & " 结算日修改完毕")
    Case "结算单客户确认"
        SystemReady = False '暂停执行事件代码
        Try
            Functions.Execute("stop_exp")
            For Each dr As DataRow In DataTables("出库主表").Select("订单客户 = '" & e.DataRow("订货客户") & "'")
                dr("结算单客户确认") = e.DataRow("结算单客户确认")
            Next
        Catch ex As Exception
            MessageBox.Show("更新结算客户确认日失败") 
        End Try
        Functions.Execute("restore_exp")
        SystemReady = True '恢复执行事件代码
        MessageBox.Show(e.DataRow("订货客户") & "  结算单客户确认修改完毕")
    Case Else
        '  代码X
End Select


与”出库主表“关联的表达式有:
DataTables("出库主表").DataCols("总金额").Expression = "Sum(Child(出库明细).金额)" 

DataTables("出库明细表").DataCols("用料规格").Expression =  "Parent(出库产品信息).用料规格"    '2017.3.31
DataTables("出库明细表").DataCols("型号规格").Expression =  "Parent(出库产品信息).型号规格"    '2017.3.31
DataTables("出库明细表").DataCols("剩余数量").Expression = "Parent(订单_出库).未交数量"
DataTables("出库明细表").DataCols("金额").Expression = "[单价] * [实交数量]"
DataTables("出库明细表").DataCols("已对账").Expression = "Parent(出库明细).已对账"
DataTables("出库明细表").DataCols("对账单").Expression = "Parent(出库明细).对账单"
DataTables("出库明细表").DataCols("制单日期").Expression = "Parent(出库明细).制单日期"
DataTables("出库明细表").DataCols("订单客户").Expression = "Parent(出库明细).订单客户" 
DataTables("出库明细表").DataCols("订单数量").Expression = "Parent(订单_出库).订单数量" 
DataTables("出库明细表").DataCols("已送数量").Expression = "Parent(订单_出库).已交数量" 
DataTables("出库明细表").DataCols("单位").Expression = "Parent(出库产品信息).单位" 
DataTables("出库明细表").DataCols("备注1").Expression = "Parent(出库产品信息).备注1" '2017.3.31
DataTables("出库明细表").DataCols("备注2").Expression = "Parent(出库产品信息).备注2" '2017.3.31
DataTables("出库明细表").DataCols("客户图号").Expression = "Parent(出库产品信息).客户图号"
DataTables("出库明细表").DataCols("客户物料代码").Expression = "Parent(出库产品信息).客户物料代码"







[此贴子已经被作者于2022/12/26 9:34:47编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/26 10:08:00 [显示全部帖子]

DataTables("出库主表").DataCols("总金额").Expression = "" 
出库主表只有一个表达式列,Functions.Execute("stop_exp") 的第一条命令就是这个。

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/26 10:24:00 [显示全部帖子]

暂停表达式耗时: 0.0110007

---------------------------

更新结算日耗时: 150.0545826

---------------------------

恢复表达式耗时: 3.9532261

---------------------------


 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/26 10:29:00 [显示全部帖子]

'DataTables("出库明细表").DataCols("剩余数量").Expression = "Parent(订单_出库).未交数量"
'DataTables("出库明细表").DataCols("订单数量").Expression = "Parent(订单_出库).订单数量" 
'DataTables("出库明细表").DataCols("已送数量").Expression = "Parent(订单_出库).已交数量"

目前发现,把订单主表、订单明细表以及与订单与出库相关的表达式都删除,更新速度一下子就正常了。

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:371 积分:4386 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2022/12/26 10:37:00 [显示全部帖子]

同样数据条数,我用测试项目,不加载关联及表达式,速度是很快(不到一秒)。

根据17楼的测试,速度慢,是因为订单明细表的关联及表达式引起的。但是,更新”出库主表“又无关订单数据。
[此贴子已经被作者于2022/12/26 10:38:56编辑过]

 回到顶部
总数 13 1 2 下一页