Node_ID and Parent_ID应该为多对一的关系吧?
用递归吧。sub Refresh_List   清空TreeView
   寻找isroot=-1的记录,intNode=它的Node_ID,添加到TreeView。
   AddN(intNode)end subsub AddN(byval intA as Integer)
 dim bFound as Boolean
 do
    寻找Parent_ID=intA的记录,
    if found then 
        bFound=True
        intNodeTemp=它的Node_ID,添加到TreeView。
        AddN(intNodeTemp)
    else
        bFound=False
    endif
  loop until not bFound
end sub

解决方案 »

  1.   

    hehe,对列,又给WESELY你快一步列
      

  2.   

    不太明白?能说的具体点么?我自己写了一个请帮忙改正。
    Dim clt As New collenction
    Dim cnn As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rs As ADODB.Recordset
    Dim pt As IntegerPrivate Sub Command1_Click()
    Dim record As String
    Dim node_id As String
    Dim nodename As String
    Dim nodechildren As Long
    Dim parentnode As String
    Dim i%, j%, n%, k%
    rs.MoveLast
    rs.MoveFirst
    pt = 1
    node_id = rs.Fields("node_id")
    Do While Not rs.EOF
     If node_id = rs.Fields("parent_id") Then
        clt.Add rs.Fields("nodename")
        j = j + 1
        Call children(node_id, j)
     End If
     If pt < rs.RecordCount Then
     pt = pt + 1
     rs.MoveNext
     Else
     Exit Do
     End If
    Loop
    For Each clt In clt.Count
    Text1.Text = Text1.Text & clt.Item(i)
    Next
    End Sub
    Private Sub children(node_id As String, j%)
    Dim i%, k%
    Dim a$, b$, C$
    Set clt = New Collection
    rs.MoveFirst
    pt = 1
    Do While Not rs.EOF
       If node_id = rs.Fields("parent_id") Then
         node_id = rs.Fields("node_id")
         j = j + 1
         clt.Add rs.Fields("nodename")
         Call children(node_id, j)
         pt = 1
         rs.MoveFirst
        Else
        End If
        pt = pt + 1
        rs.MoveNext
    Loop
    clt.Add rs.Fields("nodename")
    End SubPrivate Sub Form_Load()
    Set cnn = New ADODB.Connection
    Set cmd = New ADODB.Command
    Set rs = New ADODB.Recordset
    cnn.Open "provider=microsoft.jet.oledb.4.0;data source=c:\my documents\nodetest.mdb"
    With rs
    .ActiveConnection = cnn
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Open "select * from tbl_node"
    End With
    Set clt = New Collection
    End Sub
      

  3.   

    对不起,我这里没装VB,无法帮你调试。
    Private Sub children(node_id As Integer, intParent as Integer)dim Child_id as Integer
    dim tvItem as Node 
    dim rst=new adodb.Recordset
    rst.open "select * from .. where "parent_id=" & node_id,  ......
    rst.movefirst
    Do While Not rs.EOF
        Child_id = rst.Fields("node_id")
        set tvItem=tvXXX.Add(rst.Fields("nodename"),tvwchild,intParent)  
                                                             '我记不清Add的参数了
                                                             'intParent指明父节点
        Call children(Child_id, tvItem.Index)
        set tvitem=nothing
        rst.movenext
    Loop
    set rst=nothingEnd Sub
      

  4.   

    rst.open "select * from .. where "parent_id=" & node_id,  ......
    更正为
    rst.open "select * from .. where parent_id=" & node_id,  ......
      

  5.   

    node_id and parent_id 是一对多的关系
    两位能把代码写全点么?
    这是我的一个应聘试题。多谢!
    他们还要求要做一个集合类,接口信息:
    1.levelnode
       node_id
       nodename
       nodechildren
       parentnode
    2.levelnode
       count
       item
       add([relatekey as string],[objlevelnode as levelnode],[skey as string]) as levelnode (方法   增加)
            参数说明:
       Relatekey  上级对象在集合中的KEY
       objlevelnode 要加入集合的对象
       SKEY         在集合中的KEY
      

  6.   

    数据库为:
      Node_ID  NodeName  IsRoot  Parent_ID
       1        aaa        -1     
       2        bbb         0     1 
       3        ccc         0     1
       4        ddd         0     2
       5        eee         -1
       6        fff         0     3
       7        ggg         0     6
       8        hhh         0     5
       9        jjj         0     7
       ...
       ...
      

  7.   

    假设你已经实现了类。dim clt as LevelNodessub Refresh_List  dim lt as LevelNode  set clt = new LevelNodes
      rs.Open "select * from T where IsRoot=-1",.......
      if rs.eof then exit sub
      rs.MoveFirst
      do while not rs.eof
         set lt= new LevelNode
         lt.node_id=rs!node_id
         lt.nodename=rs!node_name
         lt.parentnode=-1
         clt.Add -1, lt, lt.Node_ID
         children lt.node_id
         rs.movenext
     loop
    end sub
    Private Sub children(node_id As Integer)dim Child_id as Integer
    dim TempNode as LevelNode
    dim rst=new adodb.Recordsetrst.open "select * from .. where parent_id=" & node_id,  ......
    if rst.eof then exit sub
    rst.movefirst
    Do While Not rs.EOF
        Child_id = rst.Fields("node_id")
        set TempNode= new LevelNode
        TempNode.node_id=rs!node_id
        TempNode.nodename=rs!node_name
        TempNode.parentnode=node_id
        clt.Add(node_id, TempNode, TempNode.Node_id)  
        children TempNode.Node_id
        rst.movenext
    Loop
    set rst=nothingEnd Sub