![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день!
Пишу программу для работы с базой данных 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
|
||||
|
||||
|
Видимо при поиске возникает "вечный" цикл, лучше использовать DataModule1.T_REC.Locate('SPECIES',надпись на ветке,[loPartialKey]) и без всяких Repeat
|
|
#3
|
|||
|
|||
|
Цитата:
А можно для моего случая, хотя бы для части ветки код написать? |
|
#4
|
||||
|
||||
|
Можно, но к сожалению, у меня нет такой чудной базуки как у вас, попробую на своих тараканчиках отработать когда будет времени побольше свободного, извнт, придётся подождать
Добавлено немного позже Вот малая толика из того, что нашлось по вашей теме Последний раз редактировалось Alegun, 17.01.2017 в 22:50. |