C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TreeView & DataSet, TreeView & DataSet
jeka_t
Отправлено: 23.02.2005, 13:37


Не зарегистрирован







Добрый день всем!
У меня вопрос такого рода:
Есть на форме компонент TreeView. Он каждый раз при открытии формы заполняется данными из базы...
Я написал код заполнения:
[CODE]
while (! Q_Objectes->Eof)
{
PMyRec MyRecPtr;
TTreeNodes* pItems;
MyRecPtr = new TMyRec;
pItems = TreeView->Items;
MyRecPtr->Key = Q_Objectes->FieldByName("Key")->AsInteger;
MyRecPtr->Level = Q_Objectes->FieldByName("Level")->AsInteger;
MyRecPtr->Parent = Q_Objectes->FieldByName("Parent")->AsInteger;
if (MyRecPtr->Parent == 0)
pItems->AddObject(NULL, Q_Objectes->FieldByName("Name")->AsString, MyRecPtr);
else
{
int i = 0;
while (iCount)
{
String Key = PMyRec(pItems->Item[i]->Data)->Key;
if (Key==MyRecPtr->Parent)
{
pItems->AddChildObject(pItems->Item[i], Q_Objectes->FieldByName("Name")->AsString, MyRecPtr);
break;
}
i++;
}
}
Q_Objectes->Next();
}
[CODE]
Но он работает медленно, так как записей в базе 132... И пока она просмотрит все записи...
Есть ли решение этой задачи по другому?
Буду очень признателен...
** full_lamer
Отправлено: 24.02.2005, 09:09


Не зарегистрирован







можно полюбопытствовать какого характера данные в базе... просто если идет чтение групп, то группы можно вынести в отдельную таблицу, и не тратить время на запрос, который будет выбирать из большой таблицы только группы, а выбирать только группы из таблицы, где записей не так много.
jeka_t
Отправлено: 24.02.2005, 10:08


Не зарегистрирован







Схема базы:
Это класификатор оборудования...
А от него подсоедина сама база оборудования...
Я делал отдельные таблицы, но это дольше получается, так как базы расположены на сервере...
AVC
Отправлено: 24.02.2005, 11:16


Ветеран

Группа: Модератор
Сообщений: 1583



Некоторого ускорения можно добится вынеся FieldByName за пределы цикла.
AVC
Отправлено: 25.02.2005, 11:41


Ветеран

Группа: Модератор
Сообщений: 1583



Попутно.
QUOTE

Но он работает медленно, так как записей в базе 132

Глупый, неоптимальный код приведенный мной в теме TreeView + BD, Gluk
грузит 150 записей за 0.171 сек. Это медленно?
jeka_t
Отправлено: 02.03.2005, 13:13


Не зарегистрирован







Я решил проблему использовав компонент JvTreeView библиотеки компонентов JEDI...
Очень классная штучка... Рекомендую всем. Быстро окуратно и главное бесплатно! smile.gif

Вернуться в Работа с базами данных в C++Builder