- Мне нужно выполнить любой запрос на выборку, используя тот же метод.
- Таким образом, запрос должен фильтровать выбранные данные, используя одно или несколько значений.
- Фильтры хранятся на карте, в которой имя столбца используется в качестве ключа, а значение фильтрации — в качестве значения.
- Итак, мой вопрос: как динамически добавлять фильтры в оператор Select?
Что я пробовал:
<сильный>1. Класс QSqlQueryModel: я мог бы создать объект QSqlQueryModel и задать запрос для извлечения всех данных таблицы, но я не смог найти в этом классе никаких функций для фильтрации этих данных:
QSqlQueryModel *model = new QSqlQueryModel; model->setQuery("SELECT * FROM employee");
<сильный>2. QSqlTableModel: этот класс используется для просмотра данных таблицы в qtableView, я могу использовать этот класс для чтения данных таблицы, а затем фильтровать эти данные следующим образом (я еще не пробовал):
QSqlTableModel *model = new QSqlTableModel model->setTable("employee"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->select(); model->setFilter("colum5 > 10"); // I can use after that data() method to retrieve filtered data.
<сильный>3. For Loop Я думал об использовании цикла for для прямого добавления фильтров, но я бы предпочел лучший способ, потому что я считаю, что QT предлагает такую услугу.
Метод должен выглядеть следующим образом:
/**
* @brief getData executes sql select query.
* @param query [out] QSqlQuery query object after executing the query.
* @param queryFilters [in] map of query filters (column-name, filter-
value).
* @param table [in] table name.
* @return
*/
bool getData(QSqlQuery &query, std::map<std::string,QVariant> &queryFilters,
std::string &table){
bool status = false;
std::string queryText = "SELECT * from " + table + " WHERE ";
// I should apply filters from queryFilters map here.
return status;
}
QMap
](doc.qt.io/qt-5/qmap.html)? - person TrebledJ   schedule 18.11.2018"SELECT * from" + table + "WHERE "
будьте осторожны с пробелами до/послеtable
, если только вы не можете гарантировать наличие пробелов. SELECT * frommyTableWHERE... не будет выполняться. - person TrebledJ   schedule 18.11.2018QSqlQueryModel
может быть лучшим решением, включите его в свой вопрос, поскольку он расскажет нам о вашем мыслительном процессе: что сработало, что не сработало. - person TrebledJ   schedule 18.11.2018