unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, ImgList, Menus, ToolWin, ComCtrls,
  Buttons, DB, ADODB;type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N221: TMenuItem;
    ADOConnection1: TADOConnection;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
  procedure subnote(mynode: TMenuItem);
    { Public declarations }
  end;type
    pmyrecord = ^Tmyrecord;
    Tmyrecord = record
    Parentnodeid : string;
    nodeid : string ;
    caption : string ;
end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
myrecordpoint : pmyrecord;
begin
  new(myrecordpoint);
  myrecordpoint.Parentnodeid := '';
  myrecordpoint.nodeid := 'root';
  myrecordpoint.caption := MainMenu1.Items[0].Caption;
  MainMenu1.Items.VCLComObject := myrecordpoint;
  subnote(MainMenu1.Items);
end;procedure TForm1.subnote(mynode:TMenuItem);
var
myrecordpointer : pmyrecord;
tmpdataset : TADODataSet;
tmpnode : TMenuItem;
sqlstr : string;
begin
   tmpdataset := TADODataSet.Create(nil);
   sqlstr := 'parentnodeid='+''''+pmyrecord(mynode.VCLComObject)^.nodeid+'''';
   tmpdataset.Connection := ADOConnection1;
   tmpdataset.CursorType := ctStatic;
   tmpdataset.CursorLocation := clUseClient;
   tmpdataset.CommandText := 'select * from mytree where '+ sqlstr + ' order by nodeid';
   tmpdataset.Active := True;
   tmpdataset.First;   while not tmpdataset.Eof do
   begin
   tmpnode:= ?????//这儿怎么写。
   New(myrecordpointer);
   myrecordpointer.Parentnodeid := tmpdataset.FieldValues['parentnodeid'];
   myrecordpointer.nodeid :=  tmpdataset.FieldValues['nodeid'];
   myrecordpointer.caption := tmpdataset.FieldValues['caption'];
   tmpnode.VCLComObject := myrecordpointer;
   subnote(tmpnode);
   tmpdataset.Next;
   end;
  tmpdataset.Active := False;
  tmpdataset.Free;
end;end.