Поиск:

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


Шустрый
*


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

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



Здравствуйте коллеги!
В БД есть таблицка иерархической структуры вида id, pid, name... т.е. дерево вообщем. весь функционал для работы реализован.
проблема заключаеться в том, что его надо заполнить данными, которые поступают тоже в виде дерева но такого
Node1 <пусто>
Node2 Node1
Node3 Node1
Node4 <пусто>
Node5 Node3
Node6 Node3
Node7 Node6
где Nodei некие текстовые строки т.е. глубина дерева входящего массива данны неизвестна.
как бы это по-ловчее оранизовать?


PM MAIL   Вверх
jcyber
Дата 26.5.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 2.4.2009

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



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


Шустрый
*


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

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



я поясню. дело в том что в БД id  pid это поля целого типа INTEGER, поле id заполняет триггер, а pid - внешний ключ на эту же таблицу на поле id с каскадным удалением для облегчения удаления ветвей.
а во входном массиве оба поля это текстовые поля значения которых должны попасть в поле name БД, а id и pid у них должны заполняться в порядке импорта массива
PM MAIL   Вверх
jcyber
Дата 26.5.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 2.4.2009

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



я бы сделал SQL-ную процедуру добавления записи в таблицу, вы ей передаете два имени nameSelf и nameParent, а процедура должна проверять наличие парента, если парент есть, тогда берем его ИД и пишем в наше поле pid, если нет, тогда сохраняем сначала парент, а потом собственно себя...
так делаем для всего массива... 
надо еще учесть что если добавляемый элемент уже есть, то его нужно не добавлять, а обновить, ну это дело техники.
PM MAIL   Вверх
rOOxus
Дата 27.5.2009, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



хм... такой вариант и мне приходил на ум. однако есть проблема! nameSelf уникально только в пределах одного nameParent. т.е. как в Windows имя файл или папки уникально только в пределах каталога в котором они лежат. то есть нельзя для всего дерева использовать nameParent как уникальный идентификатор узла. поэтому в БД есть id которое целое и уникальное
PM MAIL   Вверх
Akella
Дата 27.5.2009, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



При добавлении/редактировании контролируй.
PM MAIL   Вверх
Deniz
Дата 27.5.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



Цитата(rOOxus @  27.5.2009,  11:08 Найти цитируемый пост)
однако есть проблема! nameSelf уникально только в пределах одного nameParent
а как тогда определить, к какому родителю относится данный узел?
И возможна такая ситуация? 
Код
Node3 Node3



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
jcyber
Дата 27.5.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 2.4.2009

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



Насколько я понимаю автор изначально определил, что имена уникальны для всего дерева, а не только для какого то из его поддеревьев, а если это так, тогда я не вижу проблемы
PM MAIL   Вверх
Deniz
Дата 27.5.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

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



jcyber, читаем внимательнее.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


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

1. Базы данных (Paradox, Oracle и т.п.)

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


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


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

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


 




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


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

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