填充到treeview
就像windows,目录和文件的关系!

解决方案 »

  1.   

    dim sIDs as string 
    dim bChange as boolean
    dim rs as adodb.recordsetsids="0"rs.open "select * from tblname order by addno",cnwith rs
        while not .eof
            if instr(sids ,trim(str(.field!paddno))) <>0 then
                sids=sids & "," & trim(str(.field!paddno))
            endif
        wend
    end withrs.closeps:
       1.在返回记录集时用了order by 排序,这样省了再查找的麻烦。
       2.如果记录很多的话,instr函数会影响查询速度,就是说适用于记录集比较小的情况下.
         
      

  2.   

    写完了,也看到你的要求了,上面的不能用在填treeview.
    下面的可以:
        Dim i As Long
        Dim x As Node    tvwDepartment.Nodes.Clear
        Call tvwDepartment.Nodes.Add(, , "ID0", CorporationName)
        With rs
            .Open "select * from tblname", cn
            
            While Not .EOF
                Set x = tvwDepartment.Nodes.Add(, , "ID" & .Field!addno, Field!Text)
                x.Tag = .Field!paddno
                x.Expanded = True
            Wend
            
            .Close
        End With
        
        For i = 2 To tvwDepartment.Nodes.Count
            Set tvwDepartment.Nodes(i).Parent = tvwDepartment.Nodes("ID" & x.Tag)
        Next i
      

  3.   

    其实我的意思是:
    AddNo:代表地址号(也就是族号的意思)
    PAddNo:代表上一级的目录的地址的意思你的算法我明白。
    谢谢。。继续:)
      

  4.   

    SQL Server UDF 可解决:select depid,dbo.GetLevel(depid)
    from departmentcreate  FUNCTION dbo.GetLevel
    (@Node VARCHAR(10))
    RETURNS VARCHAR(250)
    AS
    BEGIN
    DECLARE @Temp VARCHAR(250)
    DECLARE @vGetLevel VARCHAR(250)
    SELECT TOP 1 @Temp = AdminID
    FROM Department 
    WHERE depid=@Node
    IF @Temp <> @Node OR LEN(LTRIM(RTRIM(@Temp)))<=0 OR LEN(LTRIM(RTRIM(@Node)))<=0
       BEGIN
         SELECT @vGetLevel =  ISNULL(dbo.GetLevel(@Temp),'') + '-' +  ISNULL(@Temp,'') 
       END
    ELSE SET @vGetLevel = @Temp
    RETURN @vGetLevel
    END
      

  5.   

    select AddNo,dbo.GetLevel(AddNo)
    from departmentcreate  FUNCTION dbo.GetLevel
    (@Node VARCHAR(10))
    RETURNS VARCHAR(250)
    AS
    BEGIN
    DECLARE @Temp VARCHAR(250)
    DECLARE @vGetLevel VARCHAR(250)
    SELECT TOP 1 @Temp = PAddNo
    FROM Department 
    WHERE AddNo=@Node
    IF @Temp <> @Node OR LEN(LTRIM(RTRIM(@Temp)))<=0 OR LEN(LTRIM(RTRIM(@Node)))<=0
       BEGIN
         SELECT @vGetLevel =  ISNULL(dbo.GetLevel(@Temp),'') + '-' +  ISNULL(@Temp,'') 
       END
    ELSE SET @vGetLevel = @Temp
    RETURN @vGetLevel
    END
      

  6.   

    呵呵,其实大部分递归的算法都有非递归的方法解决,一般是循环加堆栈。
    我写的第二个是用了treeview根据node之间的父子关系自动排序的特点。
      

  7.   

    能不能举一例把所有驱动器、文件夹、文件Fill到treeview的程序?谢谢