با سلام و احترام
میخواستم تو برنامه اطلاعات رو بصورت پدر فرزندی طبقه بندی کنم اما تعداد طبقه بندیم نامحدود هست مثلا سطح1 --> سطح1-1 --> سطح 1-1-1 و غیره
و فیلدهای جدول رو بصورت زیر طراحی کردم :id; parent; title
سطح1; 0 ; 1
سطح 2 ; 0; 2
سطح 1-1; 1; 3
سطح 1-2 ;1; 4
سطح 2-1 ;2 ; 5
سطح 2-2 ;2; 6
سطح2-3 ;2 ; 7
سطح1-1-1 ;3 ;8
مقدار PARENT سطح1 رو صفر میزارم تا مشخص بشه که ریشه هستش.
حالا میخوام تو یه کومبوباکس بصورت زیر نمایش بدم :
سطح 1
سطح1>سطح1-1
سطح1>سطح1-1>سطح1-1-1
سطح1>سطح1-2
سطح2
سطح2>سطح2-1
سطح2>سطح2-2
سطح2>سطح2-3
که یه تابع بازگشتی نوشتم اما تابع ذکر شده در زیر ، خروجی زیر رو داره
سطح 1
سطح1>سطح1-1
سطح1>سطح1-1>سطح1-1-1
کد:
function cat_tree(showall: boolean = false; root: integer = 0 ; prefix: string = ''): string;
var
wher,title,childs,str : string;
begin
if(root=0) then wher:= ' parent= ' + IntToStr(root)
else wher :='parent=' + IntToStr(root) + ' and parent<>id ';
with Data.AQL_Temp1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from group where ' + wher + ' order by title');
Open;
First;
while Not EOF do
begin
if prefix='' then str:='' else str:=prefix + '>';
title:=str + VarToStr(Data.AQL_Temp1['title']);
if showall then
begin
COMBO.Items.Add(title);
COMBO.Items.Add(childs);
end
else if (childs<>'') then COMBO.Items.Add(childs) else COMBO.Items.Add(title);
childs := cat_tree(showall, (Data.AQL_Temp1['id']), title);
Next;
end;
end;
end;
ممنون میشم راهنمایی فرمایید تا مشکلم حل بشه .
با تشکر
علاقه مندي ها (Bookmarks)