我有四个层次:科目、章、节、知识点
运行的时候我想从数据库中把查询到的结果显示在树形目录中,不知道怎么做?
能不能给出一段实例代码?

解决方案 »

  1.   

    给你一段代码参考:
    var id1,id2,id3:Integer;
        bootnode,tnode1,tnode2,tnode3:ttreenode;
    begin
        bootnode:=Dest_TreeView.Items.Add(Nil,'科目');    bootnode.ImageIndex:=1;
        bootnode.SelectedIndex:=0;
        Temp_Query1.Close;
        Temp_Query1.SQL.Clear;
        Temp_Query1.SQL.Add('Select * From T_KM Where (code like '''+Source_code+'%'') and (Len(code)=4)');
        Temp_Query1.Open;
        For id1:=1 To Temp_Query1.RecordCount Do
        Begin
            tnode1:=Dest_TreeView.Items.AddChild(bootnode,'('+Temp_Query1.FieldByName('code').AsString+')'+
                    Temp_Query1.FieldByName('name').AsString);
            tnode1.ImageIndex:=1;
            tnode1.SelectedIndex:=0;
            Temp_Query2.Close;
            Temp_Query2.SQL.Clear;
            Temp_Query2.SQL.Add('Select * From T_KM Where (code like '''+Temp_Query1.FieldByName('code').AsString+
                                '%'') and (Len(code)=6)');
            Temp_Query2.Open;
            For id2:=1 To Temp_Query2.RecordCount Do
            Begin
                tnode2:=Dest_TreeView.Items.AddChild(tnode1,'('+Temp_Query2.FieldByName('code').AsString+')'+
                        Temp_Query2.FieldByName('name').AsString);
                tnode2.ImageIndex:=1;
                tnode2.SelectedIndex:=0;
                Temp_Query3.Close;
                Temp_Query3.SQL.Clear;
                Temp_Query3.SQL.Add('Select distinct zsd1 From T_STTK where stid like '''+
                                    Temp_Query2.FieldByName('code').AsString+'%''');
                Temp_Query3.Open;
                For id3:=1 To Temp_Query3.RecordCount Do
                Begin
                    tnode3:=Dest_TreeView.Items.AddChild(tnode2,Temp_Query3.FieldByName('zsd1').AsString);
                    tnode3.ImageIndex:=2;
                    tnode3.SelectedIndex:=2;
                    Temp_Query3.Next;
                End;
                Temp_Query3.Close;
                Temp_Query2.Next;
            End;
            Temp_Query2.Close;
            Temp_Query1.Next;
        End;
        Temp_Query1.Close;end;
      

  2.   

    参考一下:
    type
      PMyRec = ^TMyRec;
      TMyRec = record
        pgh: string;
        pghmc: string;
        pghlb1mc: string;
        pghlb2mc: string;
        pghlb1: string;
        pghlb2: string;
        level: string;
      end;
    procedure TfyxmbF.GetXmTv;
    procedure TQueryF.SetPghTree;
    var
      TmpQuery, TmpQuery1, TmpQuery2: TQuery;
      i, j: Integer;
      TmpNode: TTreeNode;
      MyRecPtr: PMyRec;
    begin
      TmpQuery := TQuery.Create(nil);
      TmpQuery1 := TQuery.Create(nil);
      TmpQuery2 := TQuery.Create(nil);
      TmpQuery.DatabaseName := Query1.DatabaseName;
      TmpQuery1.DatabaseName := Query1.DatabaseName;
      TmpQuery2.DatabaseName := Query1.DatabaseName;
      try
        TmpQuery.DatabaseName := Query1.DatabaseName;
        TmpQuery.SQL.Text := 'SELECT DISTINCT PGHLB1MC,PGHLB1 FROM CBBPMGG ORDER BY PGHLB1';
        TmpQuery.Open;
        TV_PGH.items.Clear;
        new(MyRecPtr);
        MyRecPtr^.level := '0';
        MyRecPtr^.pghlb2mc := '所有品种'; //派工号类别2名称
        TV_PGH.Items.AddChildObject(nil, MyRecPtr^.pghlb2mc, MyRecPtr);
        TV_PGH.Items[0].StateIndex := 1;
        TV_PGH.Items.BeginUpdate;
        for i := 0 to TmpQuery.RecordCount - 1 do
        begin //类别
          new(MyRecPtr);
          MyRecPtr^.level := '1';
          MyRecPtr^.pghlb2mc := TmpQuery.Fields[0].AsString;
          TmpNode := TV_PGH.Items.AddChildObject(TV_PGH.TopItem, MyRecPtr^.pghlb2mc, MyRecPtr);
          TmpQuery1.Close;
          TmpQuery1.SQL.Text :=
            'SELECT PGHLB2MC,PGHLB2 FROM CBBPMGG WHERE PGHLB1= ' + #39 +
            TmpQuery.Fields[1].AsString + #39 + ' ORDER BY PGHLB2';
          TmpQuery1.Open;
          for j := 0 to TmpQuery1.RecordCount - 1 do
          begin //品种
            new(MyRecPtr);
            MyRecPtr^.level := '2';
            MyRecPtr^.pghlb2 := TmpQuery1.Fields[1].AsString; //派工号类别2
            MyRecPtr^.pghlb2mc := TmpQuery1.Fields[0].AsString; //派工号类别2名称
            TV_PGH.Items.AddChildObject(TmpNode, MyRecPtr^.pghlb2mc, MyRecPtr);
            TmpQuery1.Next;
          end;
          TmpQuery.Next;
        end;
        TV_PGH.Items.EndUpdate;
      finally
        TmpQuery1.Free;
        TmpQuery.Free;
      end;
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j,m,n:integer;
      s1,s2,s3,s4:string;
      node,subnode1,subnode2,subnode3:TTreeNode;
      i1,n1,i2,n2,i3,n3:integer;
    begin
      i1:=0;
      i2:=0;
      i3:=0;
      form1.Table1.Open;
      form1.Table1.First;
      i:=form1.Table1.RecordCount;
      if i>0 then
      begin
        for j:=0 to i-1 do
        begin
          s1:=form1.Table1.FieldValues['km'];
          s2:=form1.Table1.FieldValues['zh'];
          s3:=form1.Table1.FieldValues['jie'];
          s4:=form1.Table1.FieldValues['zsd'];
          m:=form1.TreeView1.Items.Count;
          if m>0 then
          begin
            for n:=0 to m-1 do
            begin
              if form1.TreeView1.Items.Item[n].Text=s1 then
              begin
                i1:=i1+1;
                n1:=n;
              end;
            end;
            if i1=1 then
            begin
              for n:=0 to m-1 do
              begin
                if (form1.TreeView1.Items.Item[n].Text=s2) and (form1.TreeView1.Items.Item[n].Parent.Text=s1) then
                begin
                  i2:=i2+1;
                  n2:=n;
                end;
              end;
              if i2=1 then
              begin
                for n:=0 to m-1 do
                begin
                  if (form1.TreeView1.Items.Item[n].Text=s3) and (form1.TreeView1.Items.Item[n].Parent.Text=s2) and (form1.TreeView1.Items.Item[n].Parent.Parent.Text=s1) then
                  begin
                    i3:=i3+1;
                    n3:=n;
                  end;
                end;
                if i3=1 then
                begin
                  subnode3:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n3],s4);
                end
                else
                begin
                  subnode2:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n2],s3);
                  subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
                end;
              end
              else
              begin
                subnode1:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n1],s2);
                subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3);
                subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
              end;
            end
            else
            begin
              node:=form1.TreeView1.Items.Add(nil,s1);
              subnode1:=form1.TreeView1.Items.AddChild(node,s2);
              subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3);
              subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
            end;
          end
          else
          begin
            node:=form1.TreeView1.Items.Add(nil,s1);
            subnode1:=form1.TreeView1.Items.AddChild(node,s2);
            subnode2:=form1.TreeView1.Items.AddChild(subnode1,s3);
            subnode3:=form1.TreeView1.Items.AddChild(subnode2,s4);
          end;
          form1.Table1.Next;
        end;
      end;
    end;
      

  4.   

    我自己以前的一段代码:procedure TForm1.FormCreate(Sender: TObject);
     var
      node1,node2,node3,node4:TTreenode;
      i,ii,iii:integer;
      glass1,class1 :string;
    begin
        treeview1.Items.Clear;
        node1:=treeview1.Items.Add(nil,'ѧУ');
        node1.ImageIndex:=0;
        query1.Open;
        for i:=1 to query1.RecordCount do
        begin
         node2:=treeview1.Items.AddChild(node1,query1.FieldByName('glass').Value);
         node2.ImageIndex:=1;
         query2.Close;
         query2.SQL.Clear;
         query2.SQL.Add('select * from class where glass='+#39+query1.FieldByName('glass').Value+#39);
         query2.Open;
         for ii:=1 to query2.RecordCount do
          begin
           node3:=treeview1.Items.AddChild(node2,query2.FieldByName('class').Value);
           node3.ImageIndex:=2;
           query3.Close;
           query3.SQL.Clear;
           query3.SQL.Add('select * from student where glass='+#39+query1.FieldByName('glass').Value+#39+'and class='+#39+query2.FieldByName('class').Value+#39);
           query3.Open;
           for iii:=1 to query3.RecordCount do
           begin
           node4:=treeview1.Items.AddChild(node3,query3.FieldByName('name_student').Value);
           node4.ImageIndex:=3;
           query3.Next;
           end;
           query2.Next;
           end;
           query1.Next;
         end;
    end;