TreeView結合數據庫的遞歸調用

1用Access建一個數據庫 數據庫名book 表名bk 字段如下

id        caption       parentid

1        書籍列表           0

2        文學                 1

3        計算機技術        1

4          三重門            2

5         編程                3

6         Java               5

7           C                  5

2窗體上放置一個ADOConnection控件,設置connectionstring和LoginPrompt屬性。

3編寫代碼如下

var
  Form2: TForm2;
  root:TTreeNode;
implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  if root=nil then
   root:=TTreeNode.Create(treeview1.Items);
end;

procedure TForm2.InitGroup(parentid: integer; root: TTreeNode);
var
 node:TTreeNode;
 ADOQuery:TADOQuery;
begin
  ADOQuery:=TADOQuery.Create(nil);
  ADOQuery.Connection:= ADOConnection1;
try
  with ADOQuery do
     begin
      close;
      sql.Clear;
      sql.Text:='select * from bk where parentid='+IntToStr(parentid);
      Open;
      First;
      while not eof do
       begin
        node:=Treeview1.Items.AddChild(root,Fields[1].AsString);
        node.Data:=Pointer(Fields[0].AsInteger);
        InitGroup(Fields[0].AsInteger,node);
        next;
       end;
     end;
finally
  ADOQuery.Free;
end;
end;

procedure TForm2.FormActivate(Sender: TObject);
var
 node1:TTreeNode;
begin
  with treeview1 do
   begin
    Items.Clear;
    Items.BeginUpdate;
    node1:=Treeview1.Items.AddChild(root,'我的圖書館');
    node1.Data:=Pointer(0);
    node1.Expanded:=True;
    InitGroup(0,node1);
    Items.EndUpdate;
   end;
end;

end.

 

4總結query必須在函數內部創建,否則會關閉原來已打開的記集的。我剛開始沒這樣做直接丟一個ADOQuery控件上去,結果總是隻顯示第一條記錄,不能達到想要的效果,弄了一下午,經過qq羣了的人的指教,原來問題就出在這,望大家也少走彎路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章