Структура данных под treeView

Ирча

Таки созрел вопросик для отдельного топика.Есть много-много объектов, со сложной и неравномерной иерархией.Создала таблицу, с хранением родительского и дочернего ключа + текстовое поле, хранящее ключи ветки от чайлда грандпарента.Но в идеале хотелось бы получать 2 тривью с разной подчиненностью. т.е.
- 1 очередь строительства - куст № 10 - объекты куста № 10
- 2 очередь строительства - куст № 10 - другие объекты куста №10
но иногда нужно увидить
- куст № 10 - 1 очередь  - объекты куста № 10 1 очереди - 2 очередь - объекты куста № 10 2 очереди
т.е. поменять местами родителейи что для этого предусмотреть в структуре таблицы - не могу сообразить... тямы нет :(
24 ответа

Ирча

У тебя гибрид дерева + несколько классификаторов для конечного уровня или промежуточных уровней. В этом случае можно (и нужно!) отрисовывать дерево "с нескольких точек зрения".Либо, бывает, когда конечные листочки принадлежат нескольким веткам (деревьям) одновременно.Дать общее универсальное решение не могу, у самого аналогичные ситуации разруливаются в каждом случае по-своему. С учетом специфики ситуации.


Ирча

Ирча,ещё ключевые поля( то есть какое-то поле с параметром), дополнительные, которые бы разделили - объекты куста № 10 и - другие объекты куста №10. А они пересекаться могут?


Ирча

Ирча, по-видимому, вам нужно по исходной таблице с заданным подчинением (которая у вас в первом случае) сделать запрос с группировкой и уже на его основе создать дерево.


Ирча

имхо, самый простой/тупой вариант - завести в таблице 2-а поля parent_idзахотите по сложному - модель направленного графатаб.вершинытаб.связи с признаком - вариант обхода


Ирча

Ирча,Я бы на Вашем месте поступил бы следующим образом:1) Абстрагировался от всяких там "...кустов, очередей..." - это Вам самому мешает посмотреть на проблему - те же кусты №10 и в 1 и во 2 очередях, а во втором представлении они вообще начинают плодиться. Короче черте что. Проще назвали бы 1, 1.1, 1.2, ...2) Выбросил бы поле Parent (ссылка на родителя) из таблицы, и создал бы отдельную таблицу Parent с полями Node (ключ узла из основной таблицы), Group (типа - Номер выводимого представления), ну и сам Parent. Т.е. для каждого выводимого представления своя группа.Кстати, на влет попробовал - вроде как получается (на уровне запроса).А далее - как прописал CoolMind Удачи!


Ирча

AlexSyr2009,К сожалению очереди строительства и пксковые комплексы, а уж темболее кусты газобых скважин не зависят от моего желания 2 П-Л... я тоже думала о двух классификаторах иерархии, надеялась что есть что-то более оптимальное, о чем я не подумала... похоже нет :( И тогда придется вернуться к дутабличным деревьям.


Ирча

Ирча,Я в общем-то не вижу в том большой беды. Сложнее чем с обычным классическим деревом, но кто обещал, что будет легко ? Кроме того, часто бывает необходимость показать все конечные листочки единым массивом (таблицей), с тем чтобы пользователь мог фильтровать по любому сочетанию классификаторов, приписанных к каждому листочку. Поскольку такие задачи возникают не один раз, я себе сделал инструментарий для их решения. Теперь такие "многодеревянные" формы и табличные формы с фильтрами-классификатрами я могу лепить быстро, без напряжения.


Ирча

в пору прикидываться блАндинкО и оформлять заказЗЫ. Я и не расчитывала, что будет легко... просто хочется предусмотреть все сразу, чтоб не переписывать потом код... времени рабочего в обрез


Ирча

У тебя mdb ?


Ирча

2 П-Л на данный момент да... только первые прикидки делаю


Ирча

"Не той, панимаишь, системы". У меня все на adp+ms sql завязано. У меня все на adp+ms sql завязано.


Ирча

Да, я помню :) в принципе.... учитывая, что только начинаю... можно и adp сделать... ток офис 2004 воткну и ms sql добавлю... давно собиралась попробовать


Ирча

Всецело поддерживаю.


Ирча

Наиболее интересная (и мощная) - форма-структура, устроенная по образцу проводника виндоуз или микрософсткого аутлука, но с некоторыми отличиями. Она состоит из двух панелей. Левая (более узкая) - дерево, показывающая набор сущностей и структуру данных каждой из них. Реализована на тривью. Справа находится панель, показывающая данные текущего узла. Если фома только открыта или выполнен щелчок по корню дерева, слева находится табличное прелставление набора сущностей. При раскрытии дерева и щелчке по сущности - справа открывается ее карточка. Если сущность сложная, она также может раскрываться и при выборее в дереве отдельной составляющей сущности справа открывается соответствующая карточка. (Эти же карточки может быть открыты как самостоятельныя формы.)
Как раз то, из за чего я всю это бодягу и затеяла


Ирча

Легко могу поделиться скриптами серверных таблиц, клиентскими формами и VBA кодом.


Ирча

Сюда срочно нужен обнимающийся и целующийся смайл :)


Ирча

Боюсь, ты плохо себе представляешь, во рискуешь ввязаться. Система НЕ является продуктом, НЕ вылизана, НЕ имеет описания, требует постоянной поддержки и смазки разработчиком.


Ирча

Это то как раз хорошо себе представляю... но, согласись... идти проторенной дорожкой проще, чем прокладывать свою... (учитывая, что она будет в 5 раз длиннее и раз 8 начинаться сначала)


Ирча

Будешь ставить у себя MS SQL 2005 ? 2008 ? Студию ? Тоже какой версии ? Как передавать тебе файлы и вести обсуждение ? Тут на форуме ?


Ирча

Можно и на форуме, но думаю это слишком спицифичная задача, и наврятли такой топик кому-то потом потребуется.


Ирча

Что ставить буду, пока не знаю... погляжу, что живое есть дома. тосно был ms sql 2005, студия тоже была, но под неё надо будет много чего на окна доставлять.


Ирча

Студия нужна постольку-поскольку. При установке сервера ставится SQL Server Management Studio. Она позволяет работать со скриптами, организованными в файлы самим программистом. Обычно в одном файле можно иметь несколько DROP (VIEW | FUNC | PROC) ... и затем CREATE (VIEW | FUNC | PROC) ... Выполнишь "RUN" - все пройдет через сервер. Плюс - создавать таблицы и связи удобно прямо на диаграмме. Минус - надо самому заботиться о нажатии RUN в студии.Visual Studio умеет работать с Database Project, с ним работать хитрее. Для каждого объекта - таблицы, вью, ф-ии, процедуры она сама создает отдельный файлик и сама "перекомпилировывает" только нужные при выполнении команды Deploy. Даже на индексы, связи и ограничения нужно создавать по файлику. На мой вкус, слишком громоздко. Плюс - всегда есть образцово-показательный скрипт всего решения, можно развернуть его от нуля на любом сервере. Минус - нельзя редактировать диаграммы и таблицы. В смысле можно, но при ближайшем Deploy все вернется в предыдущее состояние.


Ирча

Все упирается в те дрова, на которых я сейчас работаю, окна ХП ток с 1 СП, библиотек точно не хватит... но попробую установить, был дома хороший диск со студио... если что буду доустанавливать... Тут вообще странный работодатель :)


Ирча

Можно и на форуме, но думаю это слишком спицифичная задача, и наврятли такой топик кому-то потом потребуется.
Имхо, не так. Практически любая иерархическая структура когда-нибудь, но потребует иного взгляда, другого обхода. Перестройки, короче. А тут живой пример. Удобно.