Reputation: 11
about QSqlTableModel::setFilter there is very few examples for QSqlTableModel::setFilter, and I try many way to use it but all failed: //QString sqlstringqqq = QString("select * from alarmInfoTable where 1=1 order by rowid asc limit %1,20;").arg(beginIDqqq); //QString sqlstringqqq = QString("select * from alarmInfoTable where 1=1 limit %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 limit 3,7;"); ptableModel->setFilter("msgID>30;");
qDebug()<<" filter: "<< ptableModel->filter();
//ptableModel->setFilter(sqlstringqqq);
ptableModel->select();
is this method OK or not? is there any examples can run for it?
Upvotes: 1
Views: 1110
Reputation: 1280
In setFilter()
you can use only WHERE
clause and only one filter at a time, so put all your filters into one string or use QSortFilterProxyModel
subclass.
Example for setFilter()
:
void YourModel::acceptFilter(const QString &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));
}
If you want to use LIMIT
you must override selectStatement()
and append to query string your limit like so:
QString selectStatement() const
{
QString qStr = QSqlTableModel::selectStatement();
qStr += " LIMIT 100";
return qStr;
}
Upvotes: 1