Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2008, 18:59   #1
Andreych74
Пользователь
 
Регистрация: 15.08.2008
Сообщений: 12
По умолчанию Одинаковые ветки в DBTreeView

Здравствуйте!
В моей программе нужно использовать компонент типа DBTreeView. И вот возникла такая проблемка.
Если в дереве есть, например, 10 полностью одинаковых веток (имеющие разных родителей), то они со всеми внутренностями все равно в базе данных должны быть описаны 10 раз. Если потом что-то надо будет поменять, то придется менять все 10 строк.
Можно ли как-то исхитриться и в DBTreeView сделать так, чтобы одному элементу "id" соответствовало несколько родительских "parent id"? Я пробовал так редактировать таблицу, но в таком случае в общем дереве отображается только одна из 10 одинаковых веток.
Я использую dxDBTreeView от DevExpress, также видел еще несколько подобных компонентов, но те ругаются, что id не уникально. Может есть какой-то компонент для Delphi, который может не дублировать одинаковые записи? Ведь это же логично, что одинаковые записи в БД хранятся один раз, должно это быть где-то реализовано.
Уже возникает мысль вручную пробежать по БД и сформировать TreeView, но тогда потом при редактировании БД тоже придется вручную вносить изменения в TreeView, что не очень хорошо.
Единственное, что я нашел более-менее подходящим - это компонент JvDBTreeView. Но там другая проблема - при выборе в дереве, скажем, 4-ой из одинаковых веток таблица позиционируется всегда на 1-ю ветку. С одной стороны это логично, ведь компонент предполагает, что id уникально в таблице и, находя первое совпадение, позиционируется на эту строку, не обращая внимание на то, что parent id в этой строке не то, что в выбранном узле дерева. Надеюсь, что понятно объяснил

А вообще, можно ли узнать для выбранного узла дерева его id и id родителя без ручного поиска по таблице? В свойствах элемента node ничего подобного не видно, там хранится только сам отображаемый текст.
Вот и приходится, чтобы позиционироваться на полностью соответствующую строку в таблице, делать поиск текста (lookup) выделенного узла в таблице, а затем еще и поиск текста родительского узла. Неужели попроще никак нельзя?
В общем надеюсь на подсказку.
Andreych74 вне форума Ответить с цитированием
Старый 18.08.2008, 16:16   #2
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

Какая субд?
Domovoy вне форума Ответить с цитированием
Старый 18.08.2008, 17:19   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Единственное, что я нашел более-менее подходящим - это компонент JvDBTreeView.
Я тоже перепробовал кучу подобных компонентов и единственный, который мне понравился - это DynamicTreeView. Там и Demo есть.
_SERGEYX_ вне форума Ответить с цитированием
Старый 19.08.2008, 08:34   #4
Andreych74
Пользователь
 
Регистрация: 15.08.2008
Сообщений: 12
По умолчанию

База данных Paradox7.

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Я тоже перепробовал кучу подобных компонентов и единственный, который мне понравился - это DynamicTreeView. Там и Demo есть.
Компонент конечно хороший, но в данном случае абсолютно не подходит. Он сразу ругается "Duplicate list Key номер такой-то" А весь смысл моей темы в том, что у меня Key не уникально!
Andreych74 вне форума Ответить с цитированием
Старый 19.08.2008, 15:38   #5
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Цитата:
Сообщение от Andreych74 Посмотреть сообщение
одному элементу "id" соответствовало несколько родительских "parent id"?
Сам же и ответил на свой вопрос. Очевидно, что предков придется хранить в другой таблице, а для построения дерева объединять таблицы с помощью не очень хитрого SQL-запроса. И вряд ли тебе здесь поможет какой-либо компонент. Его задача отображать данные, а не решать ребусы. Лучше базу реорганизуй.

Да, и DynamicTreeView лучше не трогай... Далековато ему еще до безглючной работы.
Баламут вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одинаковые элементы kodov Общие вопросы Delphi 3 11.08.2008 14:03
Почему на форуме нет ветки Пролог? veter_s_morya О форуме и сайтах клуба 9 29.05.2008 18:35
Одинаковые строки Македонский Общие вопросы Delphi 3 05.10.2007 14:40
изменение безопасности на ветки реестра RIPPER Безопасность, Шифрование 3 22.11.2006 17:01