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


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

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

帅哥哟,离线,有人找我吗?
明天的灵
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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


Select Case e.DataCol.Name 
    Case "现金结帐"
Dim st As Date = Date.Now
        SystemReady = False '暂停执行事件代码
        Try
            Functions.Execute("stop_exp") '暂停表达式
MessageBox.Show("暂停表达式耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数
st Date.Now
DataTables("出库主表").ReplaceFor("现金客户"e.DataRow("现金结帐")"订单客户 = '" & e.DataRow("订货客户") & "'")
        Catch ex As Exception 
            'MessageBox.Show("更新现金结帐失败") 
        End Try
MessageBox.Show("更新现金结帐耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数
st Date.Now
        Functions.Execute("restore_exp")  '恢复表达式
        SystemReady = True '恢复执行事件代码
MessageBox.Show("恢复表达式耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数
        MessageBox.Show("现金结帐状态修改完毕")
        

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

更新的是"出库主表"的数据,要停止"出库主表"的表达式才有用啊

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | 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") 的第一条命令就是这个。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107285 积分:545686 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/26 10:15:00 [只看该作者]

12楼的方法测试什么地方慢?!

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | 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(订单_出库).已交数量"

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107285 积分:545686 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/26 10:31:00 [只看该作者]

只能减少加载的数据,然后使用sqlReplaceFor吧

 回到顶部
帅哥哟,离线,有人找我吗?
明天的灵
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107285 积分:545686 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/12/26 10:44:00 [只看该作者]

多个表应该都有关联关系,更新其中一个表的数据都有可能引起所有有关联的表的表达式重算

 回到顶部
总数 23 上一页 1 2 3 下一页