我在准备语句中使用QSqlQueryModel时遇到问题。当手动执行语句时,一切正常,但将它绑定到模型时,它不会执行。另一方面,当我使用“静态”查询(通过QString)设置模型时,模型会执行并阻止数据。我究竟做错了什么?QSqlQueryModel准备好的语句(使用QSqlQuery)不起作用
我prepere本查询:
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()吗?
是 - 这就是它......我认为,如果QSqlQueryModel本身执行“静态”查询,它应该与准备好的一样...可惜在QSqlQueryModel文档中缺少这样一个示例...谢谢! – murison 2014-08-28 10:41:53