Здравствуйте!
Есть в БД таблица с деталями, каждая деталь имеет несколько параметров (пусть будет до 10), столбцы с ними имеют имена par1, par2, ..., par10. В программе есть поисковик по деталям, в поисковике несколько комбобоксов, по максимальному кол-ву параметров (т.е. 10). Первый комбобокс заполняется значениями par1, второй - значениями par2 и так далее до 10. Естественно, при выборе строки в одном из комбобоксов происходит выбор из БД соответствующих строк. В поисковике есть и другие фильтры (по названию, по цене и т.д.), соответственно, при каждом новом поиске надо производить перезаполнение комбобоксов. Кусок кода, отвечающий за это:
C++ (Qt)
void Searcher::get_params_list(QString where){
// where - сформированная ранее строка, хранящая WHERE для запроса
QString query_str, par_name;
QStringList list;
QSqlQuery query;
for(int i = 0; i < MAX_PARAMS; i++){
par_name = "par" + QString::number(i+1);
selectors.at(i)->clear(); // selectors - это QList комбобоксов
query_str = "SELECT DISTINCT " + par_name + " FROM details " + where + " AND " + par_name + " != ''" + " ORDER BY " + par_name;
if(!query.exec(query_str)){
QMessageBox::warning(0, "Ошибка при выборе параметров", query.lastError().text());
break;
}
else if(query.size() == 0){
// если список пуст, делаем комбобокс неактивным
selectors.at(i)->setEnabled(false);
}
else{
while(query.next())
list << query.value(0).toString();
if(query.size() == 1)
selectors.at(i)->setCurrentIndex(1);
selectors.at(i)->setEnabled(true);
selectors.at(i)->addItems(list);
list.clear();
}
}
}
Формирование комбобоксов занимает ощутимое время (около двух-трёх секунд), что нехорошо, т.к. условия поиска могут меняться довольно часто. Основное время, как я понимаю, занимает проход циклом по результату запроса. Можно ли как-нибудь быстро преобразовать запрос из одного столбца в QStringList? Или, может, будут другие предложения, как ускорить процесс?
Заранее всем спасибо.