數據庫菜單欄位 表名:Menu   
id       name    Parentid   
1         A         0
101       A1        1
102       A2        1
10101     AA1       101
2         B         0
201       B1        2
3         C         0
301       C1        3
30101     CC1       301Delphi介面上放置一MainMenu1,如何根據數據庫里的欄位動態加載到MainMenu1中,要求是A,B,C為一級菜單,A1,A2,B1,C1為二級菜單,相應AA1為A1的子菜單,其他類似,如何用遞歸實現,困擾了很久
數據庫循環雖能實現,但頻繁查詢不是好的方法,求遞歸實現方式
最好貼出實現代碼,十分感謝,希望有朋友運行成功后發出代碼,謝謝!數據連接組件ADOQuery1,

解决方案 »

  1.   

    http://blog.csdn.net/bdmh/archive/2010/09/02/5857236.aspx
    这是生成treeview的帖子,你改成动态添加menu就行了
      

  2.   

    對我來說還是有點難度,平時注重這方面的還是太少了,平時工作都和數據庫打交道
    MainMenu的屬性處理還是不會,能貼出MainMenu的么,我好好看下,十分感謝了
      

  3.   

    根據bdmh的方法,我替換后代碼如下,但仍然報錯,代碼如下
    procedure TForm1.FormCreate(Sender: TObject);
    //var item: Tmenuitem;
    var s: Tmenuitem;
    begin
      //item := Tmenuitem.Create(self);
      //setM('0', item);
     // edit1.Text := inttostr(n);
      SetMenu(s);
    end;
    procedure TForm1.SetMenu(MainMenu: TMenuItem);
    var
      itm: TMenuItem;
      pitm: TMenuItem;  function FindParentMenu(id: string): TMenuItem;
      var
        i: Integer;
      begin
        //SetMenuItemTag;    Result := nil;
        for i := 0 to Mainmenu.Count - 1 do
        begin
          if Mainmenu.Items[i].Name = id then
          begin
            Result := Mainmenu.Items[i];
            Break;
          end;
        end;
      end;begin
      MainMenu.Clear;
      q.Close;
      q.SQL.Clear;
      q.SQL.Add(' SELECT ID,NAME,parentID FROM Menu order by parentID,id');
      q.Open;
      while not q.Eof do
      begin
        itm := TMenuItem.Create(self);
        itm.Caption := q.FieldByName('NAME').AsString;
        itm.Name:= q.FieldByName('ID').AsString;
        //memo1.Lines.Add(q.FieldByName('parentID').AsString);    if q.FieldByName('parentID').AsString = '0' then
        begin
          m.Items.Add(itm);
        end
        else
        begin
          pitm := FindParentMenu(q.FieldByName('ID').AsString);
          pitm.Add(itm);
        end;
        q.Next;
      end;end;
    其中m為MainMemu1改寫的名字,q為ADOQuery1的別名
    我感覺function 部分有錯,不知錯在哪,希望幫忙看下,十分感謝
      

  4.   

    是Function 里面的问题,如何标识呢,请求会的帮忙解答下,十分感谢