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


Автор: Pavelbej 1.8.2008, 23:40
Приветствую вас, хранящие данные в базах!  smile 

Я только начал изучать базы, как столкнулся с проблемой, причем весьма непонятной: нужно сформировать древовидную структуру на основе данных из базы. То есть читаю из определенных полей данные которые указывают кто в кого вложен и формирую дерево.
Пример:
В базе есть несколько папок и выглядит их структура так:
Код

- Bookmarks
       - Mozilla
             - Home page
         My bookmarks
         Music
       +Video


А вот что я наваял:
Код

procedure TForm1.ImportTable(parentId: integer);
begin
    Table1.First;
    while not Table1.eof do
    begin
          if Table1.fieldbyname('parent').AsInteger=parentId then//Если есть нужная запись, значит нашли что-то вложенное
              if Table1.fieldbyname('type').AsInteger=2 then  //нашли папку
              begin
                  ...Add(ZTable1.fieldbyname('title').AsString);//Добавляем папку в дерево
                  ImportTable(ZTable1.FieldbyName('id').AsInteger);//Ищем уже вложения в найденную папку
              end
              else    //нашли ссылку
              begin  
                        //с папками пока не разобрался, так что ссылки пока идут лесом
              end;
          Table1.Next;
    end;
end;


В результате я получаю:
Код

- Bookmarks
       - Mozilla
             - Home page

То есть находит только папку Mozilla и вложенные в нее папки, а остальные нет.

Что-то мне подсказывает, что я чего-то не понимаю и ошибся. Помогите исправить положение и не пинайте сильно за тупой код!

Автор: Kesh 1.8.2008, 23:51
Ну, раз с Delphi вы уже разобрались, то смотирте в сторону рекурсии smile
У вас же пока только один цикл while...

Автор: Pavelbej 2.8.2008, 11:00
Цитата(Kesh @  1.8.2008,  23:51 Найти цитируемый пост)
Ну, раз с Delphi вы уже разобрались, то смотирте в сторону рекурсии smile
У вас же пока только один цикл while... 

Но ведь с цикле я вызываю эту же процедуру, если я нахожу папку.  Даже продублировал процедуру - также не работает.  smile 
Почему не продолжает поиск, а только находит первую (и ее дочерние), непонятно.  smile 

Автор: Pavelbej 3.8.2008, 16:19
Kesh,  спасибо!
Вот что значит правильная подсказка, даже в виде одного слова.

Решение http://forum.vingrad.ru/forum/topic-43459/hl/%25D1%2580%25D0%25B5%25D0%25BA%25D1%2583%25D1%2580%25D1%2581%25D0%25B8%25D1%258F/index.html#

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