![]() |
![]() |
садовник 07.04.2004 - 13:48 | блин, туплю по черному, уже второй день не могу придумать как заносить в базу выбранные пункты в дереве, пока получается только полностью сохранять дерево в BLOB, но так нельзя база огромная получится! Короче одной записи в базе может соответствовать несколько элементов из дерева, как такое можно организовать? База interbase. |
XPEH 1 - 07.04.2004 - 14:10 | Подробнее расскажи. Какие таблицы, что за дерево. |
садовник 2 - 07.04.2004 - 14:21 |
Хорошо, щас расскажу. Дерево представляет собой справочник болезней. Примерно такой: +Травмы ....+черепеномозговая травма ...........с переломо костей черепа ...........без перелома костей черепа ...........с наличием субдуральной гематомы .....+скелетно-мозговая травма ...........бла бла бла.... и так далее, около 5 - 6 уровней, причем он должен быть редактируемым и должна быть возможность множественного выбора. Сначало думал занести ID в Treeview.items[i].DATA и их вносить в базу, но это если бы не нужен был множ.выбор. Или может быть заносить в базу эти ИДишки используя какой-нибудь разделитель типа: 12.15.5 т.е. выбраны были элементы с ИД 12, 15, 5. |
Hook 3 - 07.04.2004 - 14:49 | садовник для кого пишешь, если не секрет? |
садовник 4 - 07.04.2004 - 14:53 | я для диплома в ККЭП, щас на практике |
XPEH 5 - 07.04.2004 - 15:21 | Т.е. есть 2 таблицы - иерархический справочник и какая-то вторая, в каждую запись которой нужно занести один или несколько ID из справочника. Так? Тогда, для исключения последующего парсинга строк, лучше сохранять все эти ID в один BLOB в виде последовательности двойных слов. |
садовник 6 - 07.04.2004 - 15:28 |
"Т.е. есть 2 таблицы - иерархический справочник и какая-то вторая" да в принципе для справочника я не стал создавать таблицу, я его сохраняю при помощи WriteComponent(treeview1) в файл, а при загрузке проги считываю его из файла. ХРЕН, если не очень трудно приведи кусок кода твоей идеи, а то я совсем зеленый еще, как с этим БЛОБом работать? |
Big Duck 7 - 07.04.2004 - 15:57 |
Какой BLOB о чем вы говорите? А если поиск понадобится то че делать будете? К тому же BLOB тоже имеет свои ограничения - не боитесь перепоониться в один прекрасный момент? Для таких целей делается таблица которая вяжется к этому справочнику-дереву болезней по первому полю, и, допустим, к больному по второму В итоге получаем таблицу как минимум из этих двух полей: ID_болезни и ID_больного и если захотим - что-то еще В результате и искать проще и добавлять убирать новые/старые значения без проблем! А хранить список ID в блобах - где вас такому учили?! |
Big Duck 8 - 07.04.2004 - 16:12 |
И зачем хранить справочник болезней в каком-то внешнем файле? У тебя база данных или где? Сделай для этого таблицу! и все твои проблемы пропадают сами собой! |
садовник 9 - 07.04.2004 - 16:41 |
Big Duck, "И зачем хранить справочник болезней в каком-то внешнем файле?" в таблице то оно конечно лучше, только я потеряю кучу времени пока придумаю как организовать базу что бы она хранила дерево из treeview, а потом еще и загружать из нее в TV, а сроки принимают, скоро диплом сдавать надо будет. А чем плохо хранить TV в отдельном файле? ---------------- "ID_болезни и ID_больного и если захотим - что-то еще" так одному больному может соответствовать несколько болезней! |
Big Duck 10 - 07.04.2004 - 16:48 |
Ну, если задача стоит "скорее написать, сдать и забыть, а там пусть как хотят так и крутятся" - тогда непонятно зачем вообще было поднимать эту тему! - сделал бы хреновую залипуху и дело с концом! Древовидную структуру организовать просто: одна таблица групп, утсроена так: ID_группы, ID_родителя, наименование. В справочнике болезней ID_болезни, ID_группы, наименование. Вот и все! Че тут еще выдумывать?! Да больному будет ссответсвовать несколько болезней - а разве не это требуется? если нет - тогда зачем множественный выбор? Тогда таблицу дополнительную не надо, а в таблице больных сделать поле ссылающееся на справочник болезней.... |
садовник 11 - 07.04.2004 - 17:03 |
так какая структура будет то? таблица: больной1 - ID_1 больной1 - ID_2 больной2 - ID_2 больной2 - ID_15 больной2 - ID_3 больной3 - ID_6 так? или я не понимаю нех...? |
Big Duck 12 - 07.04.2004 - 17:13 | Для таблицы, содержащей болезни по больным - так. |
садовник 13 - 07.04.2004 - 22:57 |
попутный вопросик: с помощью какого свойства можно программно выделить элементы ТрииВьюва чтобы они подсвечивались синим цветом? |
Big Duck 14 - 08.04.2004 - 09:45 |
Какие элементы подсвечивались? Которые ты хочешь выбрать? Так можно Check-и понаставить где надо и все.... или тебе текущий элемент так хочется выделять? В любом случае смотри своства объекта node. Точно не помню, но кажется так: tree.checkbox = True Потом для каждого нужного узла дерева oNode.checked = true а если именно цвет..... не помню - надо свойства смотреть, но наверняка что-то типа BackColor там будет - вот им и надо рулить |
Наф 15 - 08.04.2004 - 09:58 |
[14] Не надо путать управление и отображение! [13] var List:TList; begin List:=TList.Create; List.Add(TreeView1.Items[0]); List.Add(TreeView1.Items[1]); List.Add(TreeView1.Items[2]); TreeView1.Select(List); end; |
Big Duck 16 - 08.04.2004 - 10:25 | Ну, он же сам спрашивал, как "программно выделить".... так что я по теме ответил....... |
садовник 17 - 08.04.2004 - 12:22 |
Big Duck, чего то не нашел я этого свойства checkbox = True и cheked тоже в ТрииВьюве нету. Спасибо, НАФ, вроде получилось. И тебе Big Duck тоже спасибо! |
Big Duck 18 - 08.04.2004 - 13:14 |
Ну, за синтаксис не ручаюсь - не знаю какой точно у тебя компонент...... а вот масдаевский, тот, который зашит в mscomctl - там точно эти свойтва есть. А синим, насколько я помню, по дефолту активный узел подсвечивается. тут Наф прав - просто его активировать и будет он синим :) TreeView1.Select(List) |