Вниз
Скачать: CL | DM;

Отчет в виде дерева   Найти похожие ветки 

 
Mitrofan   (2004-08-11 13:39) [0]

Имеется две таблицы. Первая таблица хранит дерево в виде
TableTree (
Id,
Parent_Id,
Name
)
Имеется таблица номенклатуры
TableNomenklatura (
Id,
Name,
....
Item_Ptr
)

Как вывести в отчете список номенклатуры по группам.
Т.е. что то в виде таком:
Номенклатура
 Метал /* это элемент дерева - группа */
   Железо  /* это элемент дерева - группа */
     Железо1 /* это номенклатура */
     Железо2
     Железо3
   Алюминий
     Алюминий1
     Алюминий2
 Стекло
   ...


 
Соловьев ©   (2004-08-11 15:02) [1]

СУБД?


 
Mitrofan   (2004-08-11 15:10) [2]

Firebird 1.5.1


 
Соловьев ©   (2004-08-11 15:44) [3]

http://ibase.ru/develop.htm - Древовидные структуры


 
Shade   (2004-08-11 21:56) [4]

Я не знаю поможет тебе или нет, но я вот я недавно только что то подобное писал.

//----------------------------------------------------------Рекурсивная пробежка
procedure RecurseRun( id: integer );
var
 TempQuery: TIBQuery;
begin
 with F_Reports do begin
   ord := ord + 1;
   //Добавляем в запрос новый элемент
   Query.SQL.Add( "SELECT " + IntToStr( ord ) + " AS ord," );
   Query.SQL.Add( "TREE.MARKING, TREE.NAME," );
   Query.SQL.Add( "ROUTE.DATA" );
   Query.SQL.Add( "FROM TREE, ROUTE" );
   Query.SQL.Add( "WHERE TREE.ID=" + IntToStr( id ) + " AND TREE.ID=ROUTE.ID_ITEM" );
   Query.SQL.Add( "UNION" );

   try
     TempQuery := TIBQuery.Create( F_DM );
     TempQuery.Database := F_DM.DatabaseMain;
     TempQuery.Close;
     TempQuery.SQL.Clear;
     TempQuery.SQL.Add( "SELECT ID FROM TREE WHERE PARENT=  " + IntToStr( id ) );

     TempQuery.Open;
     TempQuery.First;
     while not TempQuery.Eof do begin
       RecurseRun( TempQuery.FieldByName( "ID" ).AsInteger );                  // посылаем на рекурсию
       TempQuery.Next;
     end;
   finally
     TempQuery.Free;
   end;
 end;
end;

Посылаем на пробежку:

 Query.Close;
 Query.SQL.Clear;
 ord := 0;
 id := TAsTreeItem( F_Main.Tree.Selected.Data ).Id;
 RecurseRun( id );
 Query.SQL.Delete( Query.SQL.Count - 1 );
 Query.Open;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
14-1092758228
Ega23
2004-08-17 19:57
2004.09.05
Навеяло недавними обсуждениями


1-1092736455
FastByte
2004-08-17 13:54
2004.09.05
Унарный минус в ОПЗ


14-1092395274
Pul
2004-08-13 15:07
2004.09.05
Что-то орешник давно не пополнялся


1-1093090965
Defunct
2004-08-21 16:22
2004.09.05
Как заставить динамически созданный CheckBox переключаться?


8-1087143736
Karol
2004-06-13 20:22
2004.09.05
Задать движение точки по эллипсу на форме




   Наверх