Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отчет в виде дерева


Mitrofan ©   (2004-08-11 13:39:00) 

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

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


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

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

//----------------------------------------------------------Рекурсивная пробежка
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;


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

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


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

Firebird 1.5.1


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

СУБД?


Наверх

Титульная страница Поиск, карта сайта Написать письмо