#qt
Вопрос:
о QSqlTableModel::setFilter существует очень мало примеров для QSqlTableModel::setFilter, и я пытаюсь использовать его многими способами, но все потерпели неудачу: //QString sqlstringqqq = QString(«выберите * из alarmInfoTable, где 1=1 порядок по rowid asc предел %1,20;»).arg(beginIDqqq); //QString sqlstringqqq = QString(«выберите * из alarmInfoTable, где 1=1 предел %1,20;»).arg(beginIDqqq);
//QString sqlstringqqq = QString("SELECT * FROM alarmInfoTable LIMIT 3,10;");
//QString sqlstringqqq = QString("SELECT * FROM alarmInfoTable LIMIT 3,10");
QString sqlstringqqq = QString("select * from alarmInfoTable");
//ptableModel->setFilter("1=1 limit 2,10;");
//ptableModel->setFilter("limit 2,10;");
//ptableModel->setFilter("1=1 ORDER BY msgID ASC");
// ptableModel->setFilter(«1=1 предел 3,7;»);
ptableModel->setFilter(«msgID>>30;»);
qDebug()<<" filter: "<< ptableModel->filter();
//ptableModel->setFilter(sqlstringqqq);
ptableModel->select();
этот метод подходит или нет?
есть ли какие-либо примеры, которые можно использовать для этого?
Ответ №1:
В setFilter()
вы можете использовать только WHERE
предложение и только один фильтр одновременно, поэтому поместите все свои фильтры в одну строку или используйте QSortFilterProxyModel
подкласс.
Пример для setFilter()
:
void YourModel::acceptFilter(const QString amp;value, bool useFilterByDate, bool useDogFilter)
{
QString whereStr = "col_name = %1";
if(useFilterByDate)
whereStr = " AND DATE(date_col_name) BETWEEN '2021-01-01' AND '2021-06-06'";
if(useDogFilter)
whereStr = " AND col_name2 = 'dog'";
setFilter(whereStr.arg(value));
}
Если вы хотите использовать LIMIT
, вы должны переопределить selectStatement()
и добавить в строку запроса свой лимит следующим образом:
QString selectStatement() const
{
QString qStr = QSqlTableModel::selectStatement();
qStr = " LIMIT 100";
return qStr;
}