Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> копирование ветки дерева 
:(
    Опции темы
rOOxus
Дата 27.5.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



Здравствуйте коллеги!
В базе данных есть табличка, имеющая иерархическую структуру ну скажем TREE. поля такие ID(Integer), PID(Integer), NAME(Varchar(300)) поле ID заполняеться триггером при вставке записи, для него есть генератор. поле PID - внешний ключь с каскадным удалением, у которого внешняя таблица тоже TREE и внешенее поле ID (чтоб веточки каскадно удалялись).
а теперь вопрос: как организовать копирование ветки этого дерева в другую ветку этого же дерева?
PM MAIL   Вверх
Akella
  Дата 27.5.2009, 17:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



http://forum.vingrad.ru/topic-238823.html
Посмотри на компоненты. Там много всего интересного для работы с деревьями. Давно пользуюсь. Классная вещь.

Добавлено через 4 минуты и 4 секунды
На странице скачивания демо есть FIBTreeView/IBXTreeView -  реализация дерева для отображения иерархических данных в Interbase на базе компонентов IBX - реализация идеи, изложенной Дмитрием Кузьменко в статье Древовидные (иерархические) структуры данных в реляционных базах данных (Компонент поставляется с исходными файлами и демонстрационным примером ibase.ru). (база IB6), который может быть использован в работе.
Free. К сожалению только для D5.


PM MAIL   Вверх
rOOxus
Дата 28.5.2009, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



2 Akella
большое спасибо. компонент наверняка хороший, но клиентская часть уже реализована с помощью MemTableEh и менять никто не будет.

где-то подсмотрел рекурсивную процедуру выборки ветки дерева со всеми подветками
Код
create procedure sub_tree (
    i_id integer)
returns (
    o_id integer,
    o_pid integer,
    o_name varchar(300) character set win1251)
as
begin

   o_id = :i_id;
   select pid, name from tree where id = :o_id into :o_pid, :o_name;
   suspend;

   for
   select
      id
   from
      tree
   where
      pid = :i_id
   into
      o_id
   do
   begin
      for
      select
         o_id
      from
         sub_tree( :o_id )
      into
         :o_id
      do
      begin
         select pid, name from tree where id = :o_id into :o_pid, :o_name;
         suspend;
      end
   end
end

поначалу думал что все ок теперь только нужно вставить все записи возвращаемые процедурой в таблицу, но как присвоить новые id и pid? старые то уже не катят!
PM MAIL   Вверх
rOOxus
Дата 30.5.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



неужто никто такой проблемой не занимался никогда?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.