Office中国论坛/Access中国论坛

标题: 如何优化TREE代码,这是我加载(约5000笔数据,只有7个字段值)时需要10多秒的代码 [打印本页]

作者: luhao    时间: 2009-8-22 20:26
标题: 如何优化TREE代码,这是我加载(约5000笔数据,只有7个字段值)时需要10多秒的代码
On Error Resume Next
        Dim NodeIndex As Node
        Dim Stra As String
        Dim I As Integer
        Dim rs As ADODB.Recordset
        Dim Rs1 As ADODB.Recordset
        
        Dim opSQL As String
        
        opSQL = "SELECT 塑胶件存货档案.存货大类编码, 塑胶件存货档案.存货大类名称, 塑胶件存货档案.规格型号 " & _
                "FROM 塑胶件存货档案 " & _
                "ORDER BY val(塑胶件存货档案.存货大类名称); "
        
    Set rs = New ADODB.Recordset
    Set Rs1 = New ADODB.Recordset
   
    Dim intI As Integer
   
    Set NodeIndex = TreeView.Nodes.Add(, , "塑胶件存货档案", "塑胶件存货档案", "K1", "K2")
   
    Rs1.Open opSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
      
       For I = 1 To Rs1.RecordCount
          Set NodeIndex = TreeView.Nodes.Add(, tvwChild, "A" & Rs1("存货大类编码"), Rs1("存货大类名称"), "K1", "K2")
          NodeIndex.Sorted = True
          Rs1.MoveNext
       Next I
作者: djt    时间: 2009-8-22 21:05
需要时才载入,才能节省几秒钟
作者: luhao    时间: 2009-8-22 22:10
本帖最后由 luhao 于 2009-8-22 22:12 编辑

2# djt
但用了以下的代码,加载时就超快。。。。。但提示:type mismatch 出错,只加载一部分,不能完全加载完数据。。。。。
    '***********************************************************************************************
    ' 用数据库表中数据填充树控件
        Dim Conn As New ADODB.Connection
        Dim Rec As New ADODB.Recordset
        Dim nodIndex As Node
        Dim strSQL As String
        Dim objList As ListItem
        Dim i As Integer
        
On Error GoTo Err_cw
    Set Conn = CurrentProject.Connection
    '***********************************************************************************************
    '设置业务员
    strSQL = "SELECT DISTINCT 存货大类名称 FROM 塑胶件存货档案;"
        
        Rec.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
        
        Rec.MoveFirst
   
    With Rec
         Do While Not .EOF
         
            Set nodIndex = TreeView.Nodes.Add(, , "a" & Rec.Fields("存货大类名称"), Rec.Fields("存货大类名称"), 1, 2)
            nodIndex.Sorted = True
            
            .MoveNext
        Loop
    End With
   
            Rec.Close
    '***********************************************************************************************
    '设置地区
     strSQL = "SELECT DISTINCT 存货大类名称,规格型号 FROM 塑胶件存货档案;"
        
        Rec.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
        
        Rec.MoveFirst
   
    With Rec
         Do While Not .EOF
         
            Set nodIndex = TreeView.Nodes.Add("a" & Rec.Fields("存货大类名称"), tvwChild, "b" & Rec.Fields("存货大类名称") & Rec.Fields("规格型号"), Rec.Fields("规格型号"), 1, 2)
            nodIndex.Sorted = True
            
            .MoveNext
        Loop
    End With
   
            Rec.Close
'***********************************************************
        Set Conn = Nothing
        Set Rec = Nothing
        
Exit_cw:
    Set Conn = Nothing
    Set Rec = Nothing
    Exit Sub
Err_cw:
    MsgBox Err.Description
    Resume Exit_cw
End Sub
作者: luhao    时间: 2009-8-24 06:44
1# luhao
不要让它沉沦
作者: fan0217    时间: 2009-8-24 07:29
需要的时候才加载,不要一股脑全部加载。速度会是你以前的N倍。
作者: asklove    时间: 2009-8-24 08:04
转一个例子啊,总比猜容易些吧
作者: luhao    时间: 2009-8-24 18:08
5# fan0217
打开窗体就加载,要不,版主有何高见。。。。。。。。
作者: fan0217    时间: 2009-8-24 21:21
打开窗体的时候加载一级节点,单击节点的时候加载当前节点的下级节点,同时展开即可。论坛上我发表的有例子,自己找找。
作者: luhao    时间: 2009-8-24 22:20
8# fan0217

那怕我用第一级的也很慢,可能函数有关。请帮看下,函数有没问题.......




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3