unit asdfUnit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, Grids, DBGrids, ComCtrls, StdCtrls, ExtCtrls;type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Splitter1: TSplitter;
    RadioGroup1: TRadioGroup;
    TreeView1: TTreeView;
    Panel2: TPanel;
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Table1: TTable;
    function treefinditem(sender:ttreeview;nodeitem:ttreenode;name:string):ttreenode;
    function treeadditem(sender:ttreeview;itemlist:tstrings;book:tbook;resort:boolean):ttreenode;
    function getfieldlist(cclb:integer):tstringlist;
    procedure FormCreate(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.getfieldlist(cclb: integer): tstringlist;
var fieldlist:tfieldlist;
begin
  fieldlist.Clear  ;
  if cclb=0 then
  begin
    fieldlist.Add(table1.fieldbyname('bm').AsString );
    fieldlist.Add(table1.fieldbyname('zc').AsString );
    end else
    begin
      fieldlist.Add(table1.fieldbyname('zc').AsString );
      fieldlist.Add(table1.fieldbyname('bm').AsString );
      end;
      fieldlist.Add(table1.fieldbyname('xm').AsString );
      result:=fieldlist;
end;function TForm1.treeadditem(sender: ttreeview; itemlist: tstrings;
  book: tbook; resort: boolean): ttreenode;
var thisnode,node:ttreenode;
    i:integer;
begin
  node:=nil;
  for i:=0 to itemlist.Count -1 do
  begin
    thisnode:=treefinditem(sender,node,itemlist[i]);
    if thisnode<>nil then node:=thisnode else
      begin
       if i<itemlist.Count -1 then
         begin
           if i=0 then node:=sender.items.add(node,itemlist[i])
                         else node:=sender.items.addchild(node,itemlist[i])
            end else
            begin
              if i=0 then node:=sender.items.addobject(node,itemlist[i],book)
              else node:=sender.items.addchildobject(node,itemlist[i],book);
              node.stateindex:=node.level+1;
              if resort and (node.parent<>nil) then node.Parent.alphasort;
              end;
            end
           end;
           result:=node;end;function TForm1.treefinditem(sender: ttreeview; nodeitem: ttreenode;
  name: string): ttreenode;
begin
  if nodeitem=nil then nodeitem:=sender.items.getfirstnode
  else
  nodeitem:=nodeitem.getFirstChild ;
  if(nodeitem<>nil) and(nodeitem.Text <>name) then
  repeat
    nodeitem:=nodeitem.getNextSibling ;
    until (nodeitem=nil) or(nodeitem.Text=name);
    result:=nodeitem;
end;procedure TForm1.FormCreate(Sender: TObject);
var cclb:integer;
    fieldlist:tstringlist;
begin
  cclb:=radiogroup1.ItemIndex ;
  fieldlist:=tstringlist.Create ;
  treeview1.Items.BeginUpdate;
  treeview1.Items.Clear ;
  table1.DisableConstraints ;
  table1.First ;
  while not table1.Eof do
  begin
   treeadditem(treeview1,getfieldlist(cclb),table1.GetBook ,false);
    table1.Next
    end;
    treeview1.AlphaSort;
    table1.EnableConstraints ;
    treeview1.Items.EndUpdate ;
    treeview1.Items[2].Selected :=true;
    end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  formcreate(sender);
end;end.
错误提试
[Warning] asdfUnit1.pas(42): Variable 'fieldlist' might not have been initialized
[Hint] asdfUnit1.pas(104): Value assigned to 'fieldlist' never used

解决方案 »

  1.   

    unit asdfUnit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, DBTables, Grids, DBGrids, ComCtrls, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Splitter1: TSplitter;
        RadioGroup1: TRadioGroup;
        TreeView1: TTreeView;
        Panel2: TPanel;
        DBGrid1: TDBGrid;
        DataSource1: TDataSource;
        Table1: TTable;
        function treefinditem(sender:ttreeview;nodeitem:ttreenode;name:string):ttreenode;
        function treeadditem(sender:ttreeview;itemlist:tstrings;book:tbook;resort:boolean):ttreenode;
        function getfieldlist(cclb:integer):tstringlist;
        procedure FormCreate(Sender: TObject);
        procedure RadioGroup1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.getfieldlist(cclb: integer): tstringlist;
    var fieldlist:tfieldlist;
    begin
      fieldlist.Clear  ;  //显示这里错了
      if cclb=0 then
      begin
        fieldlist.Add(table1.fieldbyname('bm').AsString );
        fieldlist.Add(table1.fieldbyname('zc').AsString );
        end else
        begin
          fieldlist.Add(table1.fieldbyname('zc').AsString );
          fieldlist.Add(table1.fieldbyname('bm').AsString );
          end;
          fieldlist.Add(table1.fieldbyname('xm').AsString );
          result:=fieldlist;
    end;function TForm1.treeadditem(sender: ttreeview; itemlist: tstrings;
      book: tbook; resort: boolean): ttreenode;
    var thisnode,node:ttreenode;
        i:integer;
    begin
      node:=nil;
      for i:=0 to itemlist.Count -1 do
      begin
        thisnode:=treefinditem(sender,node,itemlist[i]);
        if thisnode<>nil then node:=thisnode else
          begin
           if i<itemlist.Count -1 then
             begin
               if i=0 then node:=sender.items.add(node,itemlist[i])
                             else node:=sender.items.addchild(node,itemlist[i])
                end else
                begin
                  if i=0 then node:=sender.items.addobject(node,itemlist[i],book)
                  else node:=sender.items.addchildobject(node,itemlist[i],book);
                  node.stateindex:=node.level+1;
                  if resort and (node.parent<>nil) then node.Parent.alphasort;
                  end;
                end
               end;
               result:=node;end;function TForm1.treefinditem(sender: ttreeview; nodeitem: ttreenode;
      name: string): ttreenode;
    begin
      if nodeitem=nil then nodeitem:=sender.items.getfirstnode
      else
      nodeitem:=nodeitem.getFirstChild ;
      if(nodeitem<>nil) and(nodeitem.Text <>name) then
      repeat
        nodeitem:=nodeitem.getNextSibling ;
        until (nodeitem=nil) or(nodeitem.Text=name);
        result:=nodeitem;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var cclb:integer;
        fieldlist:tstringlist;
    begin
      cclb:=radiogroup1.ItemIndex ;
      fieldlist:=tstringlist.Create ;
      treeview1.Items.BeginUpdate;
      treeview1.Items.Clear ;
      table1.DisableConstraints ;
      table1.First ;
      while not table1.Eof do
      begin
       treeadditem(treeview1,getfieldlist(cclb),table1.GetBook ,false);////显示这里错了    table1.Next
        end;
        treeview1.AlphaSort;
        table1.EnableConstraints ;
        treeview1.Items.EndUpdate ;
        treeview1.Items[2].Selected :=true;
        end;
    procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
      formcreate(sender);
    end;end.
    错误提试
    [Warning] asdfUnit1.pas(42): Variable 'fieldlist' might not have been initialized
    [Hint] asdfUnit1.pas(104): Value assigned to 'fieldlist' never used
      

  2.   

    if fieldlist.count>0 then
      fieldlist.clear;
      

  3.   

    function TForm1.getfieldlist(cclb: integer): tstringlist;
    var fieldlist:tfieldlist;
    begin  fieldlist:=Tfieldlist.create(nil);//加上这一句
      fieldlist.Clear  ;  //显示这里错了
      

  4.   

    42行是说fieldlist没有初始化,你看看帮助,看它是不是需要初始化。
    104行说分配给fieldlist得值没有被使用,不算错。这只是个hint而已。你查查源代码,看看是否有使用?
      

  5.   

    使用动态对象前,必须先创建对象!
    fieldlist:=Tfieldlist.create(nil)