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

 
DBComboBox заполнить значениями одного поля, Нужно проделать много раз-как эффективно
iAlexander
  Отправлено: 25.06.2003, 16:28


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Из БД со множеством полей нужно поочередно выбрать набор различных значений из каждого поля(для заполнения списков выбора в анкете — DBComboBox). Написал такую функцию:

void __fastcall TNewAgree::FillDBComboBox(TQuery *Query, TDBComboBox *DBCBox, AnsiString SQLQuery, AnsiString Field)
{
Query->SQL->Clear();
Query->SQL->Add(SQLQuery);
Query->Open();
Query->First();
DBCBox->Items->Clear();
while (!Query->Eof) {
DBCBox->Items->Add(Query->FieldByName(Field)->AsString);
Query->Next();
};
};

пример вызова:
FillDBComboBox(AgreeQuery, DBManager, "SELECT DISTINCT ShortName FROM personal WHERE personal.Profession = 'менеджер' ", "ShortName");

и таких вызовов штук 12.
Но работает Очень медленно. Можно ли ускорить этот процесс?
Admin
Отправлено: 25.06.2003, 17:13


Владимир

Группа: Администратор
Сообщений: 1190



Зачем-же самому из заполнять ?

Используйте TDBLookupComboBox
Заполните свойства ListSource, ListField, KeyField
и увидите весь список,
еще лучше использовать RxDBLookupCombo из
библиотеки компонентов RXLib, в нем соответственно
указываете свойства LookupSource, LookupDisplay, LookupField

(TRxDBLookupCombo позволяет использовать в качестве LookupSource
любой источник данных — как TTable, так и TQuery
, при этом свойство LookupField не обязательно должно быть
индексированным полем.
Компонента TRxDBLookupCombo также позволяет производить поиск
нужного термина при наборе первых букв этого термина и т.д.)


А если из таблицы считывать целиком весь столбец,
и помещать его в ComboBox конечно это не быстро.

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