Показать сообщение отдельно
  #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;

В чем может быть проблема?
Ответить с цитированием