![]() |
|
|
![]()
|
|
| rOOxus |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 95 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
Здравствуйте коллеги!
В БД есть таблицка иерархической структуры вида id, pid, name... т.е. дерево вообщем. весь функционал для работы реализован. проблема заключаеться в том, что его надо заполнить данными, которые поступают тоже в виде дерева но такого Node1 <пусто> Node2 Node1 Node3 Node1 Node4 <пусто> Node5 Node3 Node6 Node3 Node7 Node6 где Nodei некие текстовые строки т.е. глубина дерева входящего массива данны неизвестна. как бы это по-ловчее оранизовать? |
|||
|
||||
| jcyber |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 2.4.2009 Репутация: нет Всего: нет |
а зачем Вам знать глубину дерева? пробежитесь по массиву и сохраните эти данные
или я что то не так понял? |
|||
|
||||
| rOOxus |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 95 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
я поясню. дело в том что в БД id pid это поля целого типа INTEGER, поле id заполняет триггер, а pid - внешний ключ на эту же таблицу на поле id с каскадным удалением для облегчения удаления ветвей.
а во входном массиве оба поля это текстовые поля значения которых должны попасть в поле name БД, а id и pid у них должны заполняться в порядке импорта массива |
|||
|
||||
| jcyber |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 2.4.2009 Репутация: нет Всего: нет |
я бы сделал SQL-ную процедуру добавления записи в таблицу, вы ей передаете два имени nameSelf и nameParent, а процедура должна проверять наличие парента, если парент есть, тогда берем его ИД и пишем в наше поле pid, если нет, тогда сохраняем сначала парент, а потом собственно себя...
так делаем для всего массива... надо еще учесть что если добавляемый элемент уже есть, то его нужно не добавлять, а обновить, ну это дело техники. |
|||
|
||||
| rOOxus |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 95 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
хм... такой вариант и мне приходил на ум. однако есть проблема! nameSelf уникально только в пределах одного nameParent. т.е. как в Windows имя файл или папки уникально только в пределах каталога в котором они лежат. то есть нельзя для всего дерева использовать nameParent как уникальный идентификатор узла. поэтому в БД есть id которое целое и уникальное
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
При добавлении/редактировании контролируй.
|
|||
|
||||
| Deniz |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
И возможна такая ситуация?
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
| jcyber |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 2.4.2009 Репутация: нет Всего: нет |
Насколько я понимаю автор изначально определил, что имена уникальны для всего дерева, а не только для какого то из его поддеревьев, а если это так, тогда я не вижу проблемы
|
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
jcyber, читаем внимательнее.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |