下面是我写的一个TREEVIEW小程序的代码,你可以看,
var   rootnode,subnode,personnode,matenode:ttreenode;
      i,j,k:integer;
  begin
  rootnode:=tv1.items.add(nil,'公司');
  qrymaster.Close;
  qrymaster.sql.add('select * from master');
  qrymaster.Open;
  qrymaster.First;
  for i:=0 to qrymaster.RecordCount-1 do
  begin
        subnode:=tv1.Items.Addchild(rootnode,qrymaster.FieldByName('company').AsString);
      //原形:rootnode=tv1.items.add(nil,string);
      //   rootnode.ImageIndex :=0;
      //   rootnode.stateIndex =0;
         qrysub.Close;
         qrysub.SQL.clear;
         qrysub.SQL.Add('select * from submaster where companyid=:dd');
         qrysub.ParamByName('dd').asinteger:=qrymaster.FieldByName('companyid').asinteger;
         qrysub.Open;
         qrysub.First;
          for j:=0 to qrysub.RecordCount-1 do
          begin
             personnode:=tv1.Items.AddChild(subnode,qrysub.FieldByName('personname').AsString);
             // subnode.ImageIndex :=-1;
             // subnode.StateIndex :=-1;
             qrymate.close;
             qrymate.sql.clear;
             qrymate.sql.add('select * from comunication where personid=:personid');
             qrymate.parambyname('personid').asinteger:=qrysub.fieldbyname('personid').asinteger;
             qrymate.open;             for k:=0 to qrymate.recordcount-1 do
              begin
              matenode:=tv1.items.addchild(personnode,qrymate.fieldbyname('name').asstring);
              qrymate.next;
              end;
              qrysub.Next;
          end;      qrymaster.Next;
    end;
   end;