以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 导入报表 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=173036) |
|
-- 作者:lss1988 -- 发布时间:2021/11/12 8:44:00 -- 导入报表 描述一:先导入EXCEL报表,内容有65000行,执行代码,结果可以运行 问题点:后运用文本文件导入数据,内容有73000行,执行代码,时间超过1个小时没有结果 请问:是行数超过65000行,运行不了么?
|
|
-- 作者:有点蓝 -- 发布时间:2021/11/12 9:03:00 -- 是文本文件导入数据慢,还是执行代码慢?文本文件正常导入了没?执行了什么代码? |
|
-- 作者:lss1988 -- 发布时间:2021/11/12 10:06:00 --
|
|
-- 作者:lss1988 -- 发布时间:2021/11/12 10:06:00 -- 执行代码比较慢 |
|
-- 作者:lss1988 -- 发布时间:2021/11/12 10:11:00 -- s4=d4-y4 Dim t4 As Date T4=d4-x4 Dim o4 As Date o4=d4-e4 Dim p4 As Date p4=d4-f4 Dim q4 As Date q4=d4-g4 Dim r4 As Date r4=d4-h4
Dim dn4 as datarow For i4 As Integer=0 To DataTables("库存表20211005").datarows.count-1 dn4=DataTables("库存表20211005").datarows(i4) dn4(“数量366天至730天内”)=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]>#" & s4 & "# and [入库时间]<=#" & t4 & "# and [物料编码]=\'"& dn4("物料编码") &"\'") Next i4
Dim dr4 As DataRow Dim du4 As DataRow Dim dv4 As DataRow
For j4 As Integer=0 To DataTables("库存表20211005").datarows.count-1 dr4=DataTables("库存表20211005").datarows(j4) du4=DataTables("库存表20210928").find("[物料编码]=\'"& dr4("物料编码") &"\'") dv4=DataTables("库存表20210907").find("[物料编码]=\'"& dr4("物料编码") &"\'")
if du4 is nothing dr4("与上周比366天至730天内")=dr4("数量366天至730天内") dr4("本周到期转出366天至730天内")=0 else dr4("与上周比366天至730天内")=dr4("数量366天至730天内")-du4("数量366天至730天内") dr4("本周到期转出366天至730天内")=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]<#" & o4 & "# and [入库时间]>#" & s4 & "# and [物料编码]=\'"& dr4("物料编码") &"\'") End if
if dv4 is nothing dr4("与上月比366天至730天内")=dr4("数量366天至730天内") dr4("本月到期转出366天至730天内")=0 else dr4("与上月比366天至730天内")=dr4("数量366天至730天内")-dv4("数量366天至730天内") dr4("本月到期转出366天至730天内")=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]<#" & p4 & "# and [入库时间]>#" & s4 & "# and [物料编码]=\'"& dr4("物料编码") &"\'") End if
dr4(“本周到期转入366天至730天内”)=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]>#" & q4 & "# and [入库时间]<=#" & t4 & "# and [物料编码]=\'"& dr4("物料编码") &"\'") dr4("本周库存消化库存报废退回库存366天至730天内")=dr4("与上周比366天至730天内")+dr4("本周到期转出366天至730天内")-dr4(“本周到期转入366天至730天内”)
dr4(“本月到期转入366天至730天内”)=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]>#" & r4 & "# and [入库时间]<=#" & t4 & "# and [物料编码]=\'"& dr4("物料编码") &"\'") dr4("本月库存消化库存报废退回库存366天至730天内")=dr4("与上月比366天至730天内")+dr4("本月到期转出366天至730天内")-dr4(“本月到期转入366天至730天内”)
Next j4 Dim d5 As Date= Date.Today
Dim x5 As new timespan(731, 0, 0, 0)
Dim e5 As new timespan(713, 0, 0, 0) Dim f5 As new timespan(690, 0, 0, 0) Dim g5 As new timespan(738, 0, 0, 0) Dim h5 As new timespan(766, 0, 0, 0)
Dim t5 As Date T5=d5-x5 Dim o5 As Date O5=d5-e5 Dim p5 As Date P5=d5-f5 Dim q5 As Date Q5=d5-g5 Dim r5 As Date R5=d5-h5 Dim dn5 as datarow For i5 As Integer=0 To DataTables("库存表20211005").datarows.count-1 dn5=DataTables("库存表20211005").datarows(i5) dn5(“数量731天以外”)=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]<=#" & t5 & "# and [物料编码]=\'"& dn5("物料编码") &"\'") Next i5
Dim dr5 As DataRow Dim du5 As DataRow Dim dv5 As DataRow
For j5 As Integer=0 To DataTables("库存表20211005").datarows.count-1 dr5=DataTables("库存表20211005").datarows(j5) du5=DataTables("库存表20210928").find("[物料编码]=\'"& dr5("物料编码") &"\'") dv5=DataTables("库存表20210907").find("[物料编码]=\'"& dr5("物料编码") &"\'")
if du5 is nothing dr5("与上周比731天以外")=dr5("数量731天以外") dr5("本周到期转出731天以外")=0 else dr5("与上周比731天以外")=dr5("数量731天以外")-du5("数量731天以外") dr5("本周到期转出731天以外")=0 End if
if dv5 is nothing dr5("与上月比731天以外")=dr5("数量731天以外") dr5("本月到期转出731天以外")=0 else dr5("与上月比731天以外")=dr5("数量731天以外")-dv5("数量731天以外") dr5("本月到期转出731天以外")=0 End if
dr5(“本周到期转入731天以外”)=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]>#" & q5 & "# and [入库时间]<=#" & t5 & "# and [物料编码]=\'"& dr5("物料编码") &"\'") dr5("本周库存消化库存报废退回库存731天以外")=dr5("与上周比731天以外")+dr5("本周到期转出731天以外")-dr5(“本周到期转入731天以外”)
dr5(“本月到期转入731天以外”)=datatables(“基础数据20211005”).compute(“sum(数量)”, “[入库时间]>#" & r5 & "# and [入库时间]<=#" & t5 & "# and [物料编码]=\'"& dr5("物料编码") &"\'") dr5("本月库存消化库存报废退回库存731天以外")=dr5("与上月比731天以外")+dr5("本月到期转出731天以外")-dr5(“本月到期转入731天以外”) |
|
-- 作者:有点蓝 -- 发布时间:2021/11/12 10:56:00 -- 这种计算方法肯定慢了,行数越多就越慢。 优化方法 1、不要每个计算就遍历所有行一次,放到一个for循环里对各种功能进行计算就行了 下面是2个循环 For i As Integer=0 To DataTables("库存表20211005").datarows.count-1 循环1的代码 Next Dim dr As DataRow Dim du As DataRow Dim dv As DataRow For j As Integer=0 To DataTables("库存表20211005").datarows.count-1 循环2的代码 Next 完全可以放到一个循环里做 For i As Integer=0 To DataTables("库存表20211005").datarows.count-1 循环1的代码 Dim dr As DataRow Dim du As DataRow Dim dv As DataRow 循环2的代码 Next 所有的循环都可以合并为一个。这样表格有72000行,只需要循环72000次,原来的用法10个功能循环10次,也就是需要循环72000 * 10 = 720000次 2、看大部分计算方法都是从历史表里查询然后计算,这种建议使用SQLGroupTableBuilder进行多表关联统计:http://www.foxtable.com/webhelp/topics/1626.htm
|
|
-- 作者:lss1988 -- 发布时间:2021/11/12 14:23:00 -- 谢谢蓝老师 |
|
-- 作者:zhutangxin -- 发布时间:2021/11/14 23:32:00 -- [原创][分享]SQL Server数据导入工具 - 专家坐堂 - Foxtable(狐表) - 新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具! 或
|