以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] 优化代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=178240) |
-- 作者:sanny -- 发布时间:2022/6/24 22:06:00 -- [求助] 优化代码 老师,以下代码运行太慢了,有没有更好办法: [此贴子已经被作者于2022/6/25 21:27:09编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/6/25 9:36:00 -- 如果是同一个数据库的表,直接使用:insert select:https://blog.csdn.net/weixin_33680447/article/details/112994128 cmd.CommandText = "insert into TempConsumable (dDate,Part,Qty) Select dDate,cInvCode,iQuantity From ({rdrecord32} Inner JOIN {rdrecords32} ON {rdrecords32}.[ID] = {rdrecord32}.[ID]) where dDate > = \'" & e.Form.Controls("Datetimepicker1").Value & "\' and dDate < = \' " & e.Form.Controls("Datetimepicker2").Value &"\'" cmd.ExecuteNonQuery 最后的ConsumableMaterial表,可以先对TempConsumable表做个分组统计,然后把统计表结果填充到ConsumableMaterial:http://www.foxtable.com/webhelp/topics/0680.htm [此贴子已经被作者于2022/6/25 9:37:28编辑过]
|
-- 作者:sanny -- 发布时间:2022/6/25 11:58:00 -- T [此贴子已经被作者于2022/6/25 21:27:35编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/6/25 13:43:00 -- 如果不是同一个数据库的表。不能这样用的。 只能是1楼那样遍历了,这个如果数据多,慢是肯定的,没有优化的余地。 如果TempConsumable只是临时存储数据用的,完全没有必要使用这个表,直接使用sql做分组统计,然后填充到ConsumableMaterial
|
-- 作者:sanny -- 发布时间:2022/6/25 14:55:00 -- 老师 TempConsumable是临时存储数据用的, 以下如何使用 ? 直接使用sql做分组统计,然后填充到ConsumableMaterial 最终写到表中ConsumableMaterial即可。 上面的实在太慢了因数据太多,谢谢。
[此贴子已经被作者于2022/6/25 21:26:48编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/6/25 16:42:00 -- http://www.foxtable.com/webhelp/topics/1827.htm 网上搜索学习一下GROUP BY的用法
|
-- 作者:有点蓝 -- 发布时间:2022/6/25 16:51:00 -- 或者使用这种方式:http://www.foxtable.com/webhelp/topics/2307.htm,看示例二 Dim sql As String = "Se lect dDate,cInvCode,iQuantity From ({rdrecord32} Inner JOIN {rdrecords32} ON {rdrecords32}.[ID] = {rdrecord32}.[ID]) where dDate > = \'" & e.Form.Controls("Datetimepicker1").Value & "\' and dDate < = \' " & e.Form.Controls("Datetimepicker2").Value &"\' union Se lect dDate,cInvCode,iQuantity From ({rdrecord11} Inner JOIN {rdrecords11} ON {rdrecords11}.[ID] = {rdrecord11}.[ID]) where dDate > = \'" & e.Form.Controls("Datetimepicker1").Value & "\' and dDate < = \' " & e.Form.Controls("Datetimepicker2").Value &"\'" Dim b As New GroupTableBuilder("统计表1",sql, "Sale") b.Groups.AddDef("cInvCode") \'根据产品分组 b.Totals.AddDef("iQuantity") \'对数量进行统计 b.Build \'生成统计表 然后填充到ConsumableMaterial |