Foxtable(狐表)用户栏目专家坐堂 → 下面这段代码处理少的数据还比较快,数据量多了就卡死,可以怎么改善


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

主题:下面这段代码处理少的数据还比较快,数据量多了就卡死,可以怎么改善

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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
下面这段代码处理少的数据还比较快,数据量多了就卡死,可以怎么改善  发帖心情 Post By:2019/5/29 10:52:00 [只看该作者]

Tables("分派工序_table8").save()
For Each dr As Row In Tables("分派工序_table8").rows
    For Each br As Row In Tables("分派工序_table5").rows
Dim hpr = DataTables("派发工序表").Find("[订单号] = '" & br("订单号")  & "' and [制单号] = '" & br("制单号")  & "'and [箱号] = '" & br("箱号")  & "' and [工序号] = '" & dr("工序号")  & "'")
    If hpr IsNot Nothing Then
       If dr("生产员工") <> hpr("生产员工") Or dr("生产员工工号") <> hpr("生产员工工号")  Then
        hpr("生产员工") = dr("生产员工")
        hpr("生产员工工号") = dr("生产员工工号")
       End If
       If dr("生产员工1") <> hpr("生产员工1") Or dr("生产员工1工号") <> hpr("生产员工1工号")  Then
        hpr("生产员工1") = dr("生产员工1")
        hpr("生产员工1工号") = dr("生产员工1工号")
       End If
       If dr("生产员工2") <> hpr("生产员工2") Or dr("生产员工2工号") <> hpr("生产员工2工号")  Then
        hpr("生产员工2") = dr("生产员工2")
        hpr("生产员工2工号") = dr("生产员工2工号")
       End If
       If dr("生产员工3") <> hpr("生产员工3") Or dr("生产员工3工号") <> hpr("生产员工3工号")  Then
        hpr("生产员工3") = dr("生产员工3")
        hpr("生产员工3工号") = dr("生产员工3工号")
       End If
       If dr("生产员工4") <> hpr("生产员工4") Or dr("生产员工4工号") <> hpr("生产员工4工号")  Then
        hpr("生产员工4") = dr("生产员工4")
        hpr("生产员工4工号") = dr("生产员工4工号")
       End If
       If dr("生产员工5") <> hpr("生产员工5") Or dr("生产员工5工号") <> hpr("生产员工5工号")  Then
        hpr("生产员工5") = dr("生产员工5")
        hpr("生产员工5工号") = dr("生产员工5工号")
       End If
       If dr("工序号") <> hpr("工序号") Then
        hpr("工序号")  = dr("工序号") 
       End If
       If dr("工序名") <> hpr("工序名") Then
        hpr("工序名")  = dr("工序名") 
       End If
       If dr("车种") <> hpr("车种") Then
        hpr("车种")  = dr("车种")
       End If
       If dr("部门") <> hpr("部门") Then
        hpr("部门")  = dr("部门") 
       End If
       If dr("工价") <> hpr("工价") Then
        hpr("工价")  = dr("工价")
       End If
       If dr("基本工价") <> hpr("基本工价") Then
        hpr("基本工价")  = dr("基本工价")
       End If
       If dr("工价系数") <> hpr("工价系数") Then
        hpr("工价系数")  = dr("工价系数")
       End If
       If dr("标准工时") <> hpr("标准工时") Then
        hpr("标准工时")  = dr("标准工时")
       End If

Else
        Dim pr As DataRow = DataTables("派发工序表").addnew
        pr("订单号") = br("订单号")
        pr("制单号") = br("制单号")
        pr("客款号") = br("客款号")
        pr("货品名") = br("货品名")
        pr("物供号") = br("物供号")
        pr("部门") = br("部门")
        pr("组别") = br("班组")
        pr("款号") = br("款号")
        pr("颜色") = br("颜色")
        pr("尺码") = br("尺码")
        pr("件数") = br("件数")
        pr("箱号") = br("箱号")
        pr("工段") = br("工段")
        pr("鼎邦制单数ID") = br("鼎邦制单数ID")
        pr("工序号") = dr("工序号")
        pr("工序名") = dr("工序名")
        pr("标准工时") = dr("标准工时")
        pr("车种") = dr("车种")
        pr("部门") = dr("部门")
        pr("工价") = dr("工价")
        pr("基本工价") = dr("基本工价")
        pr("工价系数") = dr("工价系数")
        pr("生产员工") = dr("生产员工")
        pr("生产员工1") = dr("生产员工1")
        pr("生产员工2") = dr("生产员工2")
        pr("生产员工3") = dr("生产员工3")
        pr("生产员工4") = dr("生产员工4")
        pr("生产员工5") = dr("生产员工5")
        pr("生产员工工号") = dr("生产员工工号")
        pr("生产员工1工号") = dr("生产员工1工号")
        pr("生产员工2工号") = dr("生产员工2工号")
        pr("生产员工3工号") = dr("生产员工3工号")
        pr("生产员工4工号") = dr("生产员工4工号")
        pr("生产员工5工号") = dr("生产员工5工号")

        pr("条码") = br("订单号") & br("制单号") & br("款号") & br("箱号")
End If
     Next
Next

Tables("派发工序表").save()

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/29 10:54:00 [只看该作者]

1、如果把这段去掉

 

Dim hpr = DataTables("派发工序表").Find("[订单号] = '" & br("订单号")  & "' and [制单号] = '" & br("制单号")  & "'and [箱号] = '" & br("箱号")  & "' and [工序号] = '" & dr("工序号")  & "'")

 

改成

 

Dim hpr = Nothing

 

测试一下速度

 

2、看看你 【派发工序表】 datacolchanged等事件,是否写有耗时代码。

 

 


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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2019/5/29 12:03:00 [只看该作者]

 【派发工序表】所有事件都没有写代码

 

卡死是假死现象,等待时间长还是可以处理成功的,只是等待时间会比较长
[此贴子已经被作者于2019/5/29 12:04:10编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/29 12:45:00 [只看该作者]

如果把这段去掉

 

Dim hpr = DataTables("派发工序表").Find("[订单号] = '" & br("订单号")  & "' and [制单号] = '" & br("制单号")  & "'and [箱号] = '" & br("箱号")  & "' and [工序号] = '" & dr("工序号")  & "'")

 

改成

 

Dim hpr = Nothing

 

测试一下速度。上传具体实例测试。


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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2019/5/30 19:34:00 [只看该作者]

老师,测试了,这个条件不要也差不多时间,更何况这个条件是必须加的,一次性要生产十万甚至几十万行数据,有没有办法做一个后台数据处理,这样就不至于卡在那动不了
[此贴子已经被作者于2019/5/30 19:57:34编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/30 19:57:00 [只看该作者]

以下是引用yetle在2019/5/30 19:34:00的发言:
老师,测试了,这个条件不要也差不多时间,更何况这个条件是必须加的,有没有办法做一个后台数据处理,这样就不至于卡在那动不了

 

1、加上 http://www.foxtable.com/webhelp/scr/0401.htm

 

2、加上 http://www.foxtable.com/webhelp/scr/2218.htm

 

3、可以写成一个函数,然后异步调用这个函数,就可以不影响你当前操作,慢慢让其运行了。

[此贴子已经被作者于2019/5/30 19:56:54编辑过]

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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2019/5/30 20:50:00 [只看该作者]

参照帮助的代码
With DataTables("订单")
    .StopRedraw
    
For As Integer 1 To 500
        .AddNew()
    
Next
    .ResumeRedraw

End
 
With

我将下面代码增加了.ResumeRedraw和.StopRedraw,是不是这么加的,加了之后就会快?



Tables("分派工序_table8").save()
.StopRedraw
For Each dr As Row In Tables("分派工序_table8").rows
    For Each br As Row In Tables("分派工序_table5").rows
Dim hpr = DataTables("派发工序表").Find("[订单号] = '" & br("订单号")  & "' and [制单号] = '" & br("制单号")  & "'and [箱号] = '" & br("箱号")  & "' and [工序号] = '" & dr("工序号")  & "'")
    If hpr IsNot Nothing Then
       If dr("生产员工") <> hpr("生产员工") Or dr("生产员工工号") <> hpr("生产员工工号")  Then
        hpr("生产员工") = dr("生产员工")
        hpr("生产员工工号") = dr("生产员工工号")
       End If
       If dr("生产员工1") <> hpr("生产员工1") Or dr("生产员工1工号") <> hpr("生产员工1工号")  Then
        hpr("生产员工1") = dr("生产员工1")
        hpr("生产员工1工号") = dr("生产员工1工号")
       End If
       If dr("生产员工2") <> hpr("生产员工2") Or dr("生产员工2工号") <> hpr("生产员工2工号")  Then
        hpr("生产员工2") = dr("生产员工2")
        hpr("生产员工2工号") = dr("生产员工2工号")
       End If
       If dr("生产员工3") <> hpr("生产员工3") Or dr("生产员工3工号") <> hpr("生产员工3工号")  Then
        hpr("生产员工3") = dr("生产员工3")
        hpr("生产员工3工号") = dr("生产员工3工号")
       End If
       If dr("生产员工4") <> hpr("生产员工4") Or dr("生产员工4工号") <> hpr("生产员工4工号")  Then
        hpr("生产员工4") = dr("生产员工4")
        hpr("生产员工4工号") = dr("生产员工4工号")
       End If
       If dr("生产员工5") <> hpr("生产员工5") Or dr("生产员工5工号") <> hpr("生产员工5工号")  Then
        hpr("生产员工5") = dr("生产员工5")
        hpr("生产员工5工号") = dr("生产员工5工号")
       End If
       If dr("工序号") <> hpr("工序号") Then
        hpr("工序号")  = dr("工序号") 
       End If
       If dr("工序名") <> hpr("工序名") Then
        hpr("工序名")  = dr("工序名") 
       End If
       If dr("车种") <> hpr("车种") Then
        hpr("车种")  = dr("车种")
       End If
       If dr("部门") <> hpr("部门") Then
        hpr("部门")  = dr("部门") 
       End If
       If dr("工价") <> hpr("工价") Then
        hpr("工价")  = dr("工价")
       End If
       If dr("基本工价") <> hpr("基本工价") Then
        hpr("基本工价")  = dr("基本工价")
       End If
       If dr("工价系数") <> hpr("工价系数") Then
        hpr("工价系数")  = dr("工价系数")
       End If
       If dr("标准工时") <> hpr("标准工时") Then
        hpr("标准工时")  = dr("标准工时")
       End If

Else
        Dim pr As DataRow = DataTables("派发工序表").addnew
        pr("订单号") = br("订单号")
        pr("制单号") = br("制单号")
        pr("客款号") = br("客款号")
        pr("货品名") = br("货品名")
        pr("物供号") = br("物供号")
        pr("部门") = br("部门")
        pr("组别") = br("班组")
        pr("款号") = br("款号")
        pr("颜色") = br("颜色")
        pr("尺码") = br("尺码")
        pr("件数") = br("件数")
        pr("箱号") = br("箱号")
        pr("工段") = br("工段")
        pr("鼎邦制单数ID") = br("鼎邦制单数ID")
        pr("工序号") = dr("工序号")
        pr("工序名") = dr("工序名")
        pr("标准工时") = dr("标准工时")
        pr("车种") = dr("车种")
        pr("部门") = dr("部门")
        pr("工价") = dr("工价")
        pr("基本工价") = dr("基本工价")
        pr("工价系数") = dr("工价系数")
        pr("生产员工") = dr("生产员工")
        pr("生产员工1") = dr("生产员工1")
        pr("生产员工2") = dr("生产员工2")
        pr("生产员工3") = dr("生产员工3")
        pr("生产员工4") = dr("生产员工4")
        pr("生产员工5") = dr("生产员工5")
        pr("生产员工工号") = dr("生产员工工号")
        pr("生产员工1工号") = dr("生产员工1工号")
        pr("生产员工2工号") = dr("生产员工2工号")
        pr("生产员工3工号") = dr("生产员工3工号")
        pr("生产员工4工号") = dr("生产员工4工号")
        pr("生产员工5工号") = dr("生产员工5工号")

        pr("条码") = br("订单号") & br("制单号") & br("款号") & br("箱号")
End If
     Next
Next
.ResumeRedraw
Tables("派发工序表").save()

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/30 21:16:00 [只看该作者]

DataTables("派发工序表").StopRedraw

 

DataTables("派发工序表").ResumeRedraw


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


加好友 发短信
等级:四尾狐 帖子:858 积分:6381 威望:0 精华:0 注册:2017/2/13 9:04:00
  发帖心情 Post By:2019/5/30 22:47:00 [只看该作者]

老师,处理几千行数据还挺快,一次性处理上十万条数据必须卡死。这个怎么解决?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/30 23:35:00 [只看该作者]

以下是引用yetle在2019/5/30 22:47:00的发言:
老师,处理几千行数据还挺快,一次性处理上十万条数据必须卡死。这个怎么解决?

 

这个无解。10万行,是两个表的乘积(一个表1000行,一个表100行),还是说每个表都10万行?

 

具体问题,做一个实例发上来测试。


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