Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Создание дерева по базе данных


Автор: HyugaNeji 6.10.2008, 14:55
Привет.
Проблема вот в чем:
Есть база данных, в ней таблица, в ней два поля - 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 

Надеюсь объяснил понятно.

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

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

Автор: HyugaNeji 6.10.2008, 15:26
Спасибо большое за идею, попробую реализовать, надеюсь опыта и мозгов хватит )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)