以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 优先下载速度  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=178560)

--  作者:sanny
--  发布时间:2022/7/9 21:35:00
--  [求助] 优先下载速度
老师,以下这个BOM有几百万行,用以下代码太慢了,如何用Dim sql As String 来实现 ? 是不是会更快些 ?谢谢。



Dim cmd As New SQLCommand
Dim dt As DataTable
DataTables("BOM").datarows.clear
DataTables("BOM").save

cmd.C
Dim Cols1() As String = {"BomId","SortSeq","ComponentId","BaseQtyN","BaseQtyD","ParentId","Version","cInvName","VersionDesc","cInvCode"}
Dim Cols2() As String = {"BomId","SortSeq","ComponentId","BaseQtyN","BaseQtyD","ParentId","Version","cInvName","VersionDesc","cInvCode"}

cmd.CommandText ="Sel ect {bom_opcomponent}.BomId,SortSeq,ComponentId,BaseQtyN,BaseQtyD,ParentId,Version,cInvName,VersionDesc,cInvCode From (((({bom_opcomponent} Left JOIN {bom_parent} ON {bom_parent}.[BomId] = {bom_opcomponent}.[BomId]) Left JOIN {bom_bom} ON {bom_bom}.[BomId] = {bom_opcomponent}.[BomId]) Inner JOIN {bas_part} ON {bas_part}.[PartId] = {bom_opcomponent}.[ComponentId]) Inner JOIN {Inventory} ON {Inventory}.[cInvCode] = {bas_part}.[InvCode]) Where Status <> 4"

dt = cmd.ExecuteReader()
For Each dr1 As DataRow In dt.DataRows
    Dim dr2 As DataRow = DataTables("BOm").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        dr2(Cols2(i)) = dr1(Cols1(i))
         Next
Next

Tables("BOM").ResumeRedraw()

--  作者:有点蓝
--  发布时间:2022/7/10 20:44:00
--  
如果说要使用sql直接加载为适合bom的结构,比较难。

如果只是合并加载几个表的数据,几百万行一次性全部加载出来的话,不管使用什么方法都快不了。

可以考虑换种方式,使用这种动态目录树:http://www.foxtable.com/webhelp/topics/3308.htm,展开的时候才加载子bom数据,然后点击树节点的时候再加载和这个节点有关的数据