Updating tables after using QSqlRelationalTableModel:setFilter()
Unsolved
General and Desktop
-
I have a subclassed QSqlRelationalTableModel and I'm trying to update the database after applying a filter to hide empty rows. However, the queries I use inside my model no longer work correctly. It seems that, after the filter is applied, a temporary model is created with less rows. No matter what I tried, I can't make this work. The filter is applied in another class when I create the view.
The query copies all the text from a column in the referenced table to a column in the reference table. If I remove the filter, everything works perfectly. Here is a version of the function with the query:void ProjectModel::copyAll() { this->setFilter(QString()); // Here I'm trying to reset the filter this->select(); QSqlQuery query; query.prepare(QString("UPDATE %1 SET target = :text " "WHERE sourceID = :id") .arg(referenceTable)); this->database().transaction(); for (auto i = 0; i < rowCount(); ++i) { QModelIndex sourceIndex = index(i,MyModel::SIdReference); QModelIndex targetIndex = index(i,MyModel::TText); if (sourceIndex.isValid()) { if (targetIndex.data().isNull()) { query.bindValue(":text",sourceIndex.data().toString()); query.bindValue(":id",targetIndex.row()+1); // +1 = rowid in db if (!query.exec()) { qDebug() << "Not updated: " << query.lastError().text(); break; } } } } this->database().commit(); this->setFilter("sourceText != ''"); // Here I try to reapply the filter if (select()) { while(canFetchMore()) fetchMore(); } }