一个TreeView控件的和数据库的连接问题,我想把数据库里面的部门架构加载到TreeView上,代码如下:unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, ComCtrls, Grids, DBGrids;type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Procedure GetSubNodes(MyNode :TTreeNode);
    procedure FormCreate(Sender: TObject);  private    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
    Type
    PMyRecord = ^TMyRecord;
    TMyRecord = Record
      ParentNOdeID : String;
      NodeID : String;
      Caption : String;
    End;implementation{$R *.dfm}{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
var
  MyRecordPointer :PmyRecord;
begin   New(MyRecordPointer);
   MyRecordPointer.ParentNOdeID := '00';
   MyRecordPointer.NodeID := 'AA';
   MyRecordPointer.Caption :='ABC有限公司';
   TreeView1.Items.Add(nil,MyRecordPointer.Caption);
   TreeView1.Items[0].Data := MyRecordPointer;   GetSubNodes(TreeView1.Items[0]);end;procedure TForm1.GetSubNodes(MyNode: TTreeNode);
var
 tmpDataSet :TADODataSet;
 DataSet2 :TADODataSet;
 MyRecordPointer :PMyRecord;
 tmpNode : TTreeNode;
 SQLStr,SQLStr2 :String;
begin
  tmpDataSet.Active := false;
  SQLStr := 'FatherPartID = '''+PmyRecord(myNode.Data)^.NOdeID+'''';
  tmpDataSet.Connection := ADOConnection1;
  tmpDataSet.cursorType := ctStatic;
  tmpDataSet.CursorLocation := clUseClient;
  tmpDataSet.CommandText := 'select * from Part where '+SQLStr+'  order by PartID';
  tmpDataSet.Active := true;
  tmpDataSet.First;
  //showMessage(IntToStr(TmpDataSet.RecordCount));
    while not TmpDataSet.Eof  do begin
     tmpNode := TreeView1.Items.AddChild(MyNode,tmpDataSet.FieldValues['PartName']);
     New(MyRecordPointer);
     MyRecordPointer.ParentNOdeID := tmpDataSet.FieldValues['FatherPartID'];
     MyRecordPointer.NodeID := tmpDataSet.FieldValues['PartID'];
     MyRecordPointer.Caption := tmpDataSet.FieldValues['PartName'];
     tmpNode.Data := MyRecordPointer;
   SQLStr2 := 'FatherPartID = '''+PmyRecord(tmpNode.Data)^.NOdeID+'''';
  DataSet2.Connection := ADOConnection1;
  DataSet2.cursorType := ctStatic;
  DataSet2.CursorLocation := clUseClient;
  DataSet2.CommandText := 'select * from Part where '+SQLStr2+'  order by PartID';
  DataSet2.Active := true;
 if DataSet2.RecordCount <> 0 then
    begin
      GetSubNodes(tmpNode);
   //   tmpDataSet.Next;
    end;
       DataSet2.Active := false;
       DataSet2.Free;
  tmpDataSet.Next;
      end;
  end;
end.
但是程序一运行就出错: