以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 下面这段代码处理少的数据还比较快,数据量多了就卡死,可以怎么改善 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=135537) |
|
-- 作者:yetle -- 发布时间: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()
|
|
-- 作者:有点甜 -- 发布时间:2019/5/29 10:54:00 -- 1、如果把这段去掉
Dim hpr = DataTables("派发工序表").Find("[订单号] = \'" & br("订单号") & "\' and [制单号] = \'" & br("制单号") & "\'and [箱号] = \'" & br("箱号") & "\' and [工序号] = \'" & dr("工序号") & "\'")
改成
Dim hpr = Nothing
测试一下速度
2、看看你 【派发工序表】 datacolchanged等事件,是否写有耗时代码。
|
|
-- 作者:yetle -- 发布时间:2019/5/29 12:03:00 --
[此贴子已经被作者于2019/5/29 12:04:10编辑过]
|
|
-- 作者:有点甜 -- 发布时间:2019/5/29 12:45:00 -- 如果把这段去掉
Dim hpr = DataTables("派发工序表").Find("[订单号] = \'" & br("订单号") & "\' and [制单号] = \'" & br("制单号") & "\'and [箱号] = \'" & br("箱号") & "\' and [工序号] = \'" & dr("工序号") & "\'")
改成
Dim hpr = Nothing
测试一下速度。上传具体实例测试。 |
|
-- 作者:yetle -- 发布时间:2019/5/30 19:34:00 -- 老师,测试了,这个条件不要也差不多时间,更何况这个条件是必须加的,一次性要生产十万甚至几十万行数据,有没有办法做一个后台数据处理,这样就不至于卡在那动不了 [此贴子已经被作者于2019/5/30 19:57:34编辑过]
|
|
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2019/5/30 20:50:00 -- 参照帮助的代码 With DataTables("订单").StopRedraw For i 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() |
|
-- 作者:有点甜 -- 发布时间:2019/5/30 21:16:00 -- DataTables("派发工序表").StopRedraw
DataTables("派发工序表").ResumeRedraw |
|
-- 作者:yetle -- 发布时间:2019/5/30 22:47:00 -- 老师,处理几千行数据还挺快,一次性处理上十万条数据必须卡死。这个怎么解决? |
|
-- 作者:有点甜 -- 发布时间:2019/5/30 23:35:00 -- 以下是引用yetle在2019/5/30 22:47:00的发言:
老师,处理几千行数据还挺快,一次性处理上十万条数据必须卡死。这个怎么解决?
这个无解。10万行,是两个表的乘积(一个表1000行,一个表100行),还是说每个表都10万行?
具体问题,做一个实例发上来测试。 |