我在使用带有准备好的语句的 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) << "}";
}
}
在 postgres 日志中,我有准备语句,并在之后执行它。但是当将它绑定到模型时它不起作用:
QSqlQueryModel* model = new QSqlQueryModel(this);
model->setQuery(query);
//model->setQuery("SELECT kontrahentid, trim(format ('%s %s %s', kontrahentnazwafirmy, kontrahentnazwisko, kontrahentimie) ) as nazwa FROM kontrahent");
if (model->lastError().isValid()) {
qDebug() << model->lastError();
return;
}
for (int i = 0; i < model->rowCount(); ++i) {
//int id = model.record(i).value("id").toInt();
//QString name = model.record(i).value("name").toString();
qDebug() << model->record(i).value(0) << model->record(i).value(1);
}
在 postgres 日志中,我只有准备语句,没有执行的迹象......但是当取消注释带有“静态”查询的行(并评论它上面的那个)时,它一切正常......
我究竟做错了什么?在将查询对象绑定到模型之前,我必须在查询对象上运行 execute() 吗?