数据表类似如下
现业务号   原业务号
.......
0002     0001
0003     0002
0004     0003
0005     0001
.............
现在当给出某个现业务号时,要求能够从现业务号与原业务号的关联,读出从它所能找到的所有业务号,
以上面为例,当给出 现业务号0004时,要能把0001、0002、0003、0004、0005都从数据库中找出来,填充到treeview中,形成|-----0001
|-----0002
|-----0003
|-----0004
|-----0005
这样的树,并要默认0004节点为选中状态 我对TreeView不熟悉,也不知怎么才能从某个现业务号读出所有关联号,时间紧,请大家帮帮我。谢谢啦!

解决方案 »

  1.   

    应该用递归的方法来填充树。在TreeView的beforeexpland事件里面加载下一层节点。至于如何取得关联,直接用联合查询就可以了,找SQL的书看一下。
      

  2.   

    你确定一定需要TreeView么?我怎么觉得你的数据表现出来就是个列表,用ListBox更合适呢?
      

  3.   

    另外,根据你3楼的示例,你的规则是这样的么:对于给定的一个编号,找到所有和它有关系的编号。两个编号A和B有关系,当满足以下条件之一:
    (1)同伴关系:A和B位于同一条记录的不同字段中。不妨称A和B是同伴关系,A和B互为同伴。
    (2)扩展关系:A和B的同伴是同伴。
      

  4.   

    To 皮皮鲁:这样的表结构倒是表达树结构的经典形式,但是楼主所写的数据表现结果却和TreeView相去甚远,数据查询规则(如果我没理解错的话)也有别于通常的树状数据。
      

  5.   


    Private Sub Command1_Click()
       
        Dim strLast As String
        Dim strCurr As String
        
        Dim objRoot As Node
        Dim objParent As Node
        Dim objSelect As Node
        Dim objRS As Recordset
        
        On Error GoTo Err_Return
        
        Const strSQL As String = "Select * from [table] order by 现业务编号, 原业务编号"
        TreeView1.Nodes.Clear
        Set objRoot = TreeView1.Nodes.Add(, , , "业务编号")
        
        Set objRS = New Recordset
        objRS.Open strSQL, ConnString
        
        If Not (objRS.BOF And objRS.EOF) Then
            objRS.MoveFirst
            While Not objRS.EOF
                strCurr = objRS!现业务编号
                If strCurr <> strLast Then
                    strLast = strCurr
                    Set objParent = TreeView1.Nodes.Add(objRoot, 4, , strCurr)
                    If strCurr = "0004" Then
                        Set objSelect = objParent
                    End If
                End If
                TreeView1.Nodes.Add objParent, 4, , objRS!原业务编号
                objRS.MoveNext
            Wend
        End If
        
        If Not objSelect Is Nothing Then
            objSelect.Checked = True
            Set TreeView1.SelectedItem = objSelect
            objSelect.EnsureVisible
        End If
        
        Exit Sub
        
    Err_Return:
        MsgBox Err.Description
    End Sub
      

  6.   

    用两个list 来装
    现业务号  原业务号 
    ....... 
    0002    0001 
    0003    0002 
    0004    0003 
    0005    0001 list1选中一个后取得选中内容的ID  通过list2对应ID可以找到原业务号  然后添加list2内容到TreeView 通过原来取得的ID选中TreeView内容
      

  7.   

    从网上查到类似
     select 现业务号  from TEST
    start with 现业务号='0004'
    connect by prior 现业务号 = 原业务号
    order by 现业务号 asc
    可以得到  
    0004 
    0005 
    .
    但是得不到前面的啊,
    请大家帮我。
      

  8.   

    得用递归来求,用一条SQL语句完不成这样的任务。