我使用 Qt 5.7、C++、SQLite 数据库。我有QSqlTableModel
后代。我通过调用(setRecord()
模式)更新行。让我们设置为单行。它正确保存在数据库中,相应的也会自动刷新。当我再次设置为任何行时,修改会显示在视图中,但不会保存在数据库中。请参阅Qt 5.7.0 的 qsqltablemodel.cpp 源代码submitAll()
QSqlTableModel::OnManualSubmit
value_1
field_1
QTableView
value_2
field_1
bool QSqlTableModelPrivate::exec(const QString &stmt, bool prepStatement,
const QSqlRecord &rec, const QSqlRecord &whereValues)
它包含以下片段:
if (editQuery.lastQuery() != stmt) {
if (!editQuery.prepare(stmt)) {
error = editQuery.lastError();
return false;
}
}
就我而言,对于第二次和进一步的更新调用,以下条件为真:editQuery.lastQuery() == stmt
.
stmt 可以包含类似的值
UPDATE documents SET "mark"=? WHERE "documents"."id" = ? AND "documents"."checked" = ? AND "documents"."state" = ?
所以,bool QSQLiteResult::prepare(const QString &query)
不叫。这就是为什么在分配之后
int paramCount = sqlite3_bind_parameter_count(d->stmt);
这个条件为真:(paramCount == 0
见qsql_sqlite.cpp:429,d->stmt
是一个指向它的指针sqlite3_stmt
,它是 NULL)。
它导致最终错误“参数计数不匹配”。这是一个错误,有什么解决方法?请不要建议原始 SQL,我不想经常重置模型。