以文本方式查看主题

-  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 intTempConsumable (dDate,Part,QtySelect 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