С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
5 / 5 / 0
Регистрация: 14.10.2010
Сообщений: 210

Дерево

21.04.2011, 12:51. Показов 3360. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал функцию(рекурсивную) построения дерева но где-то зацикливается (только отступы пока не делал)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Soss_tree(AnsiString Ddce,AnsiString QueryTxt,TOraQuery *Query,int First,AnsiString Union)
{
  Query->Close();
  if(First==0)Query->SQL->Text=QueryTxt+" Union "+ Soss->OraQuery1->SQL->Text;// к текущему запросу добавляем предыдущие (First=1- Первый раз)
  AnsiString S1 = StringReplace(Query->SQL->Text, ":dce", "'"+Ddce+"'", TReplaceFlags());//заменяем параметр на число
  Query->ParamByName("dce")->AsString = Ddce;
  Query->Open();// выполняем запрос
  Soss->OraDataSource2->DataSet=Query;// записываем в DBGrid
  while(Query->Eof==false) 
        {
 
           Query->Next();
           Soss_tree(Query->FieldByName("dce0")->AsString,S1,Query,0,"");//запускаем заново
 
        }
}
Вывести надо в DBGrid
Помогите пожалуйста может кто делал деревья
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2011, 12:51
Ответы с готовыми решениями:

Дерево кнопок
Друзья помогите советом.. Ситуация такая: есть окно(форма) заданного размера. В базе данных есть таблица в которой прописана иерархия...

Генеалогическое дерево
Всем добрый вечер(утро,день,ночь) Есть задание : Реализовать Генеалогическое дерево. Паспортные данные членов некоторого родового...

Бинарное дерево
Доброй ночи, форумчане. Помогите пожалуйста с программой написания бинарного дерева. Опять же занимался переносом с консольного...

4
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
21.04.2011, 14:23
ДБГрид не предназначен для дерева. Обычно делают "спарку" TTreeView+TDBGrid
В TTreeView помещают собственно древовидную структуру, состоящую из "узлов", а в гриде отображают "листья" текущего узла. При премещении по дереву в гриде обновляется содержимое.

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

Все остальные варианты - это комбинации 1-го и 2-го способов, зависящие от объемов данных, быстродействия (сервера+сети), а также требований к интерфейсу пользователя

Если Вы выбрали 2-й способ (полное разузлование и показ дерева "по частям", то стиандартный алгоритм разузлования с рекурсией (вроде того, что Вы скопипастили в свой проект, но "адаптировали" до полной неработоспособнности ), то в интернете просто масса ссылок на типовые алгоритмы (по большому счету их всего 2 разновидности)
0
5 / 5 / 0
Регистрация: 14.10.2010
Сообщений: 210
22.04.2011, 06:17  [ТС]
Можно пару ссылок на примеры
0
64 / 64 / 10
Регистрация: 19.10.2009
Сообщений: 234
22.04.2011, 07:49
Цитата Сообщение от MsGuns Посмотреть сообщение
ДБГрид не предназначен для дерева.
Ну смотря какой, например DBGridEh в связке с MemTableEh спокойно отображает древовидную структуру.
Режим хранения записей в виде дерева (TreeView).
В режиме дерева TMemTableEh создает объекты-узлы (типа TMemRecViewEh) для каждой записи внутреннего массива записей. Объект-узел имеет ссылку на запись (свойство Rec) и ссылку на список подузлов (NodeItems).
Настройка и активизация режима TreeView осуществляется с помощью подсвойств объекта TMemTableEh.TreeList. TMemTableEh автоматически добавляет новые записи в дерево, используя свойства TreeList.KeyFieldName и TreeList.RefParentFieldName. При появлении новой записи, MemTable пытается найти для нее Parent запись, осуществляя поиск записей, у которых значение поля KeyFieldName равно значению поля RefParentFieldName новой записи. Кроме того, он проверяет, не является ли новая запись Parent записью для уже существующих записей. Формирование дерева записей значительно ускоряется, если создать индексы по полям указанным в TreeList.KeyFieldName и TreeList.RefParentFieldName. Однако максимальной скорости формирования дерева можно добиться когда поток новых записей поступает в правильной последовательности, т.е. вначале должна идти Parent запись, а затем ее Chield записи, причем если у Chield записи есть SubChield записи то они должны идти сразу после Chield. При этом индексы создавать не рекомендуется, они могут только замедлить создание дерева. Другими словами данные должны идти в той последовательности, в какой они будут отображаться в дереве. При такой последовательности поступления записей рекомендуется также отключить свойство FullBuildCheck.

Свойства объекта TMemTableEh.TreeList:
Active: Boolean Определяет, что режим TreeView включен. В режиме TreeView вы можете обращаться к свойствам TMemTableEh: TreeNodeLevel, TreeNodeExpanded, TreeNodeHasChildren, TreeNodeChildCount.
KeyFieldName: String Содержит название ключевого поля записи. Дочерние записи будут ссылаться на родительскую запись с ключом определенным полем KeyFieldName.
RefParentFieldName: String Содержит название поля содержащего ссылку на родительскую запись.
DefaultNodeExpanded: Boolean Определяет значение свойства Expanded для новых узлов дерева.
DefaultNodeHasChildren: Boolean Определяет значение свойства HasChildren для новых узлов дерева.
FullBuildCheck: Boolean Определяет необходимость делать проверку на наличие существующих Child записей при изменении записи или добавлении новой записи. Выставление этого свойства в False может ускорить формирование дерева, но при заполнения DataSet’а все Child записи должны идти после Parent записи.

Для доступа к состоянию узла дерева текущей записи Dataset’а, можно использовать следующие свойства TMemTableEh:
RecView: TMemRecViewEh – ссылка на объект-узел дерева, доступна только в режиме дерева.
TreeNodeLevel: Integer – уровень узла в дереве.
TreeNodeExpanded: Boolean – узла в дереве раскрыт.
TreeNodeHasChildren: Boolean – узел имеет Child узлы.
TreeNodeChildCount: Integer – количество Child узлов.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
22.04.2011, 10:02
Результаты 3-х минутного "приема" у г-на Гугля:

http://msdn.microsoft.com/ru-r... .100).aspx
http://www.sql.ru/forum/actual... tid=250051
http://algolist.manual.ru/ds/walk.php
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2011, 10:02
Помогаю со студенческими работами здесь

Бинарное дерево
Всем привет!Помогите исправить ошибки #include <iostream.h> #include <iomanip.h> #include <stdlib.h> #include...

Бинарное дерево
Доброго времени суток. Есть задание: Описать класс, что реализует бинарное дерево, обладающие возможностью добавление новых элементов,...

дерево каталогов
Всем привет!!У меня такая проблема))Не могу понять почему у меня ничего не выводит в компоненту TreeView , хотя транслятор всё...

C++Builder дерево
помогите создать прогу на C++Builder для создание дерева(елементарно простую без всяких заморочек)

Бинарное дерево
Задание на картинке, помогите, пожалуйста, создать функцию поиска величины наибольшего элемента дерева


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru