function TForm1.AddANode(MyTreeNode: TMyTreeNode): TTreeNode;
var
  i: Integer;
  parentNode: TTreeNode;
begin
  if MyTreeNode.Added then
  begin
    for i := 0 to tv.Items.count - 1 do
      if TMyTreeNode(tv.Items[i].data).id = MyTreeNode.id then
      begin
        Result := tv.Items[i];
        break;
      end;
  end
  else
  begin
    for i := 0 to Length(Nodearr) - 1 do
      if Nodearr[i].id = MyTreeNode.parentid then
      begin
        parentNode := AddaNode(Nodearr[i]);
        break;
      end;
     MyTreeNode.Added := True;
     Result := tv.Items.AddChildObject(parentNode, MyTreeNode.Name, MytreeNode);
  end;
end;

解决方案 »

  1.   

    就是用TREEVIEW和数据库连接
      就是上面那些源码有问题了
        提示错误为
        return value of function 'tform1.addanode'might be numdefined
        variable 'parentnode'might not have been initialized
      

  2.   

    变量、类型能不能多表达一点。
    TMyTreeNode是什么结构,干嘛要自己定义个TreeNode结构呢。
      

  3.   

    TMytreenode是一个类 
    那我把所有的源码都贴出吧!
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, ComCtrls;type
     TMytreeNode=class
     public
      id:string;
      parentid:string;
      name:string;
      added:boolean;
      constructor Create(Aid, AParentid, AName: String);
       end;  TForm1 = class(TForm)
        ADOC: TADOConnection;
        ADOQ: TADOQuery;
        TV: TTreeView;
        procedure FormShow(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
      Nodearr: array of TMyTreeNode;
      function AddANode(MyTreeNode: TMyTreeNode): TTreeNode;    { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    constructor TMytreeNode.Create(Aid, AParentid, AName: String);
    begin
      inherited Create;
      id := Aid;
      Parentid := AParentid;
      Name := AName;
      Added := false;
    end;  
    function TForm1.AddANode(MyTreeNode: TMyTreeNode): TTreeNode;
    var
      i: Integer;
      parentNode: TTreeNode;
    begin
      if MyTreeNode.Added then
      begin
        for i := 0 to tv.Items.count - 1 do
          if TMyTreeNode(tv.Items[i].data).id = MyTreeNode.id then
          begin
            Result := tv.Items[i];
            break;
          end;
      end
      else
      begin
        for i := 0 to Length(Nodearr) - 1 do
          if Nodearr[i].id = MyTreeNode.parentid then
          begin
            parentNode := AddaNode(Nodearr[i]);
            break;
          end;
         MyTreeNode.Added := True;
         Result := tv.Items.AddChildObject(parentNode, MyTreeNode.Name, MytreeNode);
      end;
    end;
    procedure TForm1.FormShow(Sender: TObject);
    var
      i: Integer;
    begin
      ADOQ.Connection:=ADOC;
      ADOQ.Close;
      ADOQ.SQL.Clear;
      ADOQ.SQL.Add('select id,parentid,name from code') ;
      ADOQ.Active:=true;
      ADOQ.First;
      SetLength(Nodearr, 0);  
      while not ADOQ.Eof do
      begin  
        SetLength(Nodearr, Length(Nodearr) + 1);  
        Nodearr[High(Nodearr)] := TMyTreeNode.Create(ADOQ.FieldByName('id').AsString,
                                  ADOQ.FieldByName('parentid').AsString,                              ADOQ.FieldByName('name').AsString);    ADOQ.Next;
      end;  
      for i := 0 to high(Nodearr) do
      if not Nodearr[i].Added then
         addANode(Nodearr[i]);end;
      

  4.   

    弹出的错误是什么?
    Unable to insert an item???
      

  5.   

    你的AddANode函数需要改一点点,进入函数的时候parentNode是指向一个未知位置,
         Result := tv.Items.AddChildObject(parentNode, MyTreeNode.Name, MytreeNode);
    会出现一个异常,所以先给parentNode赋个空值即可。function TForm1.AddANode(MyTreeNode: TMyTreeNode): TTreeNode;
    var
      i: Integer;
      parentNode: TTreeNode;
    begin
      parentNode:=nil;//////////////////////////////////////////////这里赋空
      if MyTreeNode.Added then