Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание дерева по базе данных, Дерево строится по двум полям... 
:(
    Опции темы
HyugaNeji
Дата 6.10.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.6.2008

Репутация: нет
Всего: нет



Привет.
Проблема вот в чем:
Есть база данных, в ней таблица, в ней два поля - ID , PARENT_ID.
По этим полям должно строиться дерево - ветвь ID должно присоеденяться к PARENT_ID
Я написал код:

Код

String name;
 TTreeNode *par;

 for (int i=0; i<IBQuery1->RecordCount;i++) {
 
name = IBQuery1->FieldByName("NAME")->Text;

  if (IBQuery1->FieldByName("PARENT_ID")->Value!=-1) {
   par=TreeView1->Items->Item[(IBQuery1->FieldByName("PARENT_ID")->Value)];
  }else {
   par=NULL;
  }

  TreeView1->Items->Add( par , name);
  IBQuery1->RecNo++;
 }


Сортировка по полю ID.

Дерево строится нормально, пока не доходит до того места где ID меньше чем PARENT_ID, и выдаёт ошибку , так как неможет найти эту ветвь, т.е. она ещё не создана.

Попробывал сортировку по полю PARENT_ID - такая же ерунда...


Можно ли обойти эту проблему? Например перенсти запись в которой ID меньше чем PARENT_ID в конец таблицы, и обработать её потом. Или вообще какой-нибудь другой код?  smile 

Надеюсь объяснил понятно.
PM MAIL   Вверх
andov
Дата 6.10.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


programmer



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.2.2008

Репутация: нет
Всего: нет



Где гарантия что записи в базе по ID будет идти  вподряд. 
Как ты можешь ссылаться в дереве по индексу Item["ParentID"]

Я бы, для создания дерева, рекомендовал рекурсию.
Дешаешь функцию, которая выполняет запрос к базе и создает всех детей для ParentID
При этом Вызывает саму же себя со своим ID, создав тем самым своих детей, если они есть.

PM   Вверх
HyugaNeji
Дата 6.10.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.6.2008

Репутация: нет
Всего: нет



Спасибо большое за идею, попробую реализовать, надеюсь опыта и мозгов хватит )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0397 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.