Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.01.2017, 15:06
MissIren MissIren вне форума
Прохожий
 
Регистрация: 28.12.2016
Сообщения: 8
Версия Delphi: Turbo Delphi
Репутация: 10
По умолчанию Работа с TreeView в Delphi

Добрый день!

Пишу программу для работы с базой данных Access.
Структуру данных демонстрирую с помощью TreeView, всего две основные ветки.
При работе с деревом в первой ветке все узлы открываются щелчком левой кнопки мыши по их названию.
А при переходе на вторую ветку узлы раскрываются только щелчком по "+", при щелчке по названию вся программа зависает.

Работа с деревом только в двух процедурах:
При создании формы отрисовывается дерево:
Код:
  DataModule1.T_KONCEPT.Open; 
  DataModule1.T_SPECIES.Open; 
  DataModule1.T_REC.Open; 
  if not DataModule1.T_KONCEPT.IsEmpty then 
  begin
     DataModule1.T_KONCEPT.First; 
     Repeat        MainNode:=TreeView1.Items.AddChild(nil,DataModule1.T_KONCEPT.FieldByName('NAME_KONCEPT').asString); 
       DataModule1.T_SPECIES.First; 
       Repeat 
         if DataModule1.T_KONCEPT.FieldByName('ID_KONCEPT').AsInteger =
            DataModule1.T_SPECIES.FieldByName('KONCEPT').AsInteger then
           begin
             GrNode := TreeView1.Items.AddChild(MainNode,DataModule1.T_SPECIES.FieldByName('NAME_SPEC').asString);
             DataModule1.T_REC.First; 
             Repeat 
               if DataModule1.T_REC.FieldByName('SPECIES').asInteger=
                  DataModule1.T_SPECIES.FieldByName('ID_SPEC').asInteger then 
               ConNode:=TreeView1.Items.AddChild(GrNode,DataModule1.T_REC.FieldByName('NAME_RECORDS').asString);  
                DataModule1.T_REC.Next; 
             until DataModule1.T_REC.Eof; 
           end;
         DataModule1.T_SPECIES.Next; 
       until DataModule1.T_SPECIES.Eof; 
       DataModule1.T_KONCEPT.Next; 
     until DataModule1.T_KONCEPT.Eof; 
  end;
  MainNode.Expand(False); 

и при выборе какой-либо записи происходит отображение данных из Базы:

Код:
If Node<>nil then 
 if Node.AbsoluteIndex<>0 then 
   if Node.Parent.AbsoluteIndex<>0 then 
    begin
     DataModule1.T_REC.First; 
     if DataModule1.T_REC.FieldByName('NAME_RECORDS').AsString<>Node.Text then
     repeat
      DataModule1.T_REC.Next;
     until DataModule1.T_REC.FieldByName('NAME_RECORDS').AsString=Node.Text;

     DataModule1.T_KONCEPT.First;
     repeat
        if DataModule1.T_REC.FieldByName('KONCEPT_RECORDS').asInteger=DataModule1.T_KONCEPT.FieldByName('ID_KONCEPT').asInteger then Panel2.Caption:=DataModule1.T_KONCEPT.FieldByName('NAME_KONCEPT').AsString;
        DataModule1.T_KONCEPT.Next;
     until DataModule1.T_KONCEPT.Eof;

     DataModule1.T_SPECIES.First;
     repeat
        if DataModule1.T_REC.FieldByName('SPECIES').asInteger=DataModule1.T_SPECIES.FieldByName('ID_SPEC').asInteger then 
        Panel3.Caption:=DataModule1.T_SPECIES.FieldByName('NAME_SPEC').AsString;
        DataModule1.T_SPECIES.Next;
     until DataModule1.T_SPECIES.Eof;
end;

В чем может быть проблема?
Ответить с цитированием
  #2  
Старый 13.01.2017, 15:30
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Видимо при поиске возникает "вечный" цикл, лучше использовать DataModule1.T_REC.Locate('SPECIES',надпись на ветке,[loPartialKey]) и без всяких Repeat
Ответить с цитированием
  #3  
Старый 13.01.2017, 15:54
MissIren MissIren вне форума
Прохожий
 
Регистрация: 28.12.2016
Сообщения: 8
Версия Delphi: Turbo Delphi
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Видимо при поиске возникает "вечный" цикл, лучше использовать DataModule1.T_REC.Locate('SPECIES',надпись на ветке,[loPartialKey]) и без всяких Repeat

А можно для моего случая, хотя бы для части ветки код написать?
Ответить с цитированием
  #4  
Старый 13.01.2017, 23:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Можно, но к сожалению, у меня нет такой чудной базуки как у вас, попробую на своих тараканчиках отработать когда будет времени побольше свободного, извнт, придётся подождать

Добавлено немного позже

Вот малая толика из того, что нашлось по вашей теме
Вложения
Тип файла: zip TreeView.zip (78.1 Кбайт, 6 просмотров)

Последний раз редактировалось Alegun, 17.01.2017 в 22:50.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter