Postgresql QSqlQueryModel准备语句(使用QSqlQuery)不工作

Postgresql QSqlQueryModel准备语句(使用QSqlQuery)不工作,postgresql,qt5,qsqlquery,Postgresql,Qt5,Qsqlquery,我在将QSqlQueryModel与预处理语句一起使用时遇到问题。当手动执行语句时,一切正常,但当将其绑定到模型时,它不会执行。另一方面,当我使用“静态”查询(通过QString)设置模型时,模型执行并加载数据。我做错了什么 我准备这样的查询: QSqlQuery query; query.prepare(QString("SELECT \ kontrahentid \ , trim(format ('%s %s %s', kontrahentnazwafirmy

我在将QSqlQueryModel与预处理语句一起使用时遇到问题。当手动执行语句时,一切正常,但当将其绑定到模型时,它不会执行。另一方面,当我使用“静态”查询(通过QString)设置模型时,模型执行并加载数据。我做错了什么

我准备这样的查询:

QSqlQuery query;
query.prepare(QString("SELECT \
        kontrahentid \
        , trim(format ('%s %s %s', kontrahentnazwafirmy, kontrahentnazwisko, kontrahentimie) ) as nazwa \
    FROM kontrahent \
    WHERE %1 ilike ? \
").arg(searchBy));
query.addBindValue(searchString);
if (query.exec()) {
    while (query.next()) {
        qDebug() << "{" << query.value(0) << ", " << query.value(1) << "}";
    }
}
当进行如下查询时,它会起作用:

QSqlQuery query;
query.prepare(QString("SELECT \
        kontrahentid \
        , trim(format ('%s %s %s', kontrahentnazwafirmy, kontrahentnazwisko, kontrahentimie) ) as nazwa \
    FROM kontrahent \
    WHERE %1 ilike ? \
").arg(searchBy));
query.addBindValue(searchString);
if (query.exec()) {
    while (query.next()) {
        qDebug() << "{" << query.value(0) << ", " << query.value(1) << "}";
    }
}
if(query.exec()){
while(query.next()){
qDebug()
在将查询对象绑定到之前,是否必须对其运行execute()
模型

是的,医生说:

请注意,查询必须处于活动状态,并且不能处于活动状态 isForwardOnly()

要激活查询,它必须已执行。的文档说明:

已成功执行的SQL语句将查询的状态设置为活动 因此isActive()返回true。否则,查询的状态设置为 在这两种情况下,在执行新SQL语句时 查询位于无效记录上。活动查询必须是 在之前导航到有效记录(以便isValid()返回true) 可以检索值


是的——就是这样……我认为如果QSqlQueryModel本身执行“静态”查询,它应该对准备好的查询执行相同的操作……遗憾的是,QSqlQueryModel文档中缺少这样一个示例……谢谢!