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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2015, 10:46   #1
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию Virtual treeview + дерево в таблице БД

Собственно есть таблица БД MS Access структура: id, tname, p_id

Вопрос как правильно присвоить корневым элементам дочерние по значению полей id и p_id.

Что смог осилить прилагаю.

p.s.: с этим компонентом ранее не работал.
Вложения
Тип файла: zip tree.zip (93.9 Кб, 14 просмотров)
le7o вне форума Ответить с цитированием
Старый 16.09.2015, 08:17   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Проект не поднял, ибо надо ставить вст, лениво, поглядел код и базу только.
Есть просто как идеи:
2 способа:
1 в лоб, непроизводительный но простой - берём пилим запрос , в нём все элементы сортируем сперва по пид , потом по ид, и в цикле из датасета генерим дерево - запоминаем первый пид и начинаем вставлять элементы под айдишниками в вст, как только пид текущей записи изменился от запомненого, перезапоминаем пид и находим узел с этим идом и внего вставляем всех детей аналогично, и так пока датасет не закончится. Если дерево с кучей веток и листов, то поиск родителя в которого вставлять очередную порцию будет бить производительность. Плюс я не могу сказать, не сломается ли тут профит от виртуальности вст, честно сказать, вообще сложно представляю виртуальность древовидности (список то легко), это же многоуровневая структура и динамически перегрузить её кусок и отобразить, без перечитывания взаимосвязей текущего куска со всей массой данных мне видится сложным.
2 способ - более гуманный и, возможно, даже позволяющий профит от виртуальности - написать иерархический запрос (гуглим способы для аксеса), при котором дерево как бы развернётся в список, где просто будет указание как перескакнуть по уровням при обработке текущей "строчки" для древовидности. Но способ во-первых сложен самим фактом написания такого запроса под аксес, во-вторых, я не знаю как приспособлен вст к такой вставке элементов, может он как бы позволяет указывать сразу уровень, на который сдвинуть элемент и как к нему линии прочертить лишь по циферке, которую как раз выдаст иерархический запрос.
phomm вне форума Ответить с цитированием
Старый 21.09.2015, 07:49   #3
le7o
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 116
По умолчанию

У Вас есть пример для второго способа?

Цитата:
Сообщение от phomm Посмотреть сообщение
Проект не поднял, ибо надо ставить вст, лениво, поглядел код и базу только.
Есть просто как идеи:
2 способа:
1 в лоб, непроизводительный но простой - берём пилим запрос , в нём все элементы сортируем сперва по пид , потом по ид, и в цикле из датасета генерим дерево - запоминаем первый пид и начинаем вставлять элементы под айдишниками в вст, как только пид текущей записи изменился от запомненого, перезапоминаем пид и находим узел с этим идом и внего вставляем всех детей аналогично, и так пока датасет не закончится. Если дерево с кучей веток и листов, то поиск родителя в которого вставлять очередную порцию будет бить производительность. Плюс я не могу сказать, не сломается ли тут профит от виртуальности вст, честно сказать, вообще сложно представляю виртуальность древовидности (список то легко), это же многоуровневая структура и динамически перегрузить её кусок и отобразить, без перечитывания взаимосвязей текущего куска со всей массой данных мне видится сложным.
2 способ - более гуманный и, возможно, даже позволяющий профит от виртуальности - написать иерархический запрос (гуглим способы для аксеса), при котором дерево как бы развернётся в список, где просто будет указание как перескакнуть по уровням при обработке текущей "строчки" для древовидности. Но способ во-первых сложен самим фактом написания такого запроса под аксес, во-вторых, я не знаю как приспособлен вст к такой вставке элементов, может он как бы позволяет указывать сразу уровень, на который сдвинуть элемент и как к нему линии прочертить лишь по циферке, которую как раз выдаст иерархический запрос.
le7o вне форума Ответить с цитированием
Старый 21.09.2015, 16:26   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Примера нет, с аксесом и вст\втв не работаю. Видел на хабре неплохую статью по иерархическим запросам, там по сути в виде чистого sql можно найти, который аксес мог бы прожевать.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по Virtual Treeview Lauri Компоненты Delphi 8 04.04.2013 00:09
Incremental Search в Virtual Treeview kettanaito Компоненты Delphi 4 21.11.2011 22:19
Virtual Treeview и несколько изображений grafgrial Общие вопросы Delphi 2 04.07.2011 19:57
Virtual TreeView Шульц Общие вопросы Delphi 3 25.10.2009 09:48
Virtual Treeview iLya84a Компоненты Delphi 3 01.08.2008 12:49