2

我使用 Qt 5.7、C++、SQLite 数据库。我有QSqlTableModel后代。我通过调用(setRecord()模式)更新行。让我们设置为单行。它正确保存在数据库中,相应的也会自动刷新。当我再次设置为任何行时,修改会显示在视图中,但不会保存在数据库中。请参阅Qt 5.7.0 的 qsqltablemodel.cpp 源代码submitAll()QSqlTableModel::OnManualSubmitvalue_1field_1QTableViewvalue_2field_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 == 0qsql_sqlite.cpp:429d->stmt是一个指向它的指针sqlite3_stmt,它是 NULL)。

它导致最终错误“参数计数不匹配”。这是一个错误,有什么解决方法?请不要建议原始 SQL,我不想经常重置模型。

4

0 回答 0