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

Дерево

21.04.2011, 12:51. Показов 3396. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных выбран регистр накопления, в. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru