PDA

View Full Version : توابع بازگشتی / Recursive



sma_mohseni
دوشنبه 19 دی 1384, 21:25 عصر
سلام
در مورد توابع بازگشتی یک سوال داشتم .
من یک جدول دارم که اطلاعات مربوط به یک tree را در آن ذخیره کرده ام جدول دارای فیلدهای id , parent_id , title میباشد. حالا میخوام این اطلاعات را توسط یک treeview نمایش بدم. این کار را با استفاده از توابع بازگشتی امتحان کردم ولی مشکل آن اینست که تابع فقط به سمت جلو حرکت میکند و به عقب بر نمیگردد. کد مربوط به تابع به این صورت است.


function TTreeForm.TreeMaker(var parent_id:integer):integer;
var
new_parent_id : integer ;
node : TTreeNode;
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='select * from Tree where parent_id='+inttostr(parent_id)+' and type=1';
ADOQuery1.Open;
if parent_id = 0 then node := nil else node := nil;
while (not ADOQuery1.Eof) do begin
TreeView1.Items.Add(node , Trim(ADOQuery1.FieldValues['title']));
new_parent_id := ADOQuery1.FieldValues['id'];
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text:='select * from Tree where parent_id='+inttostr(new_parent_id)+' and type=1';
ADOQuery2.Open;
if ADOQuery2.RecordCount > 0 then begin
TreeMaker(new_parent_id);
end;
ADOQuery1.Next;
end;
end;



با تشکر