本文介绍了选择查询返回“值:未定位在有效记录上";在 Qt的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在编写一个小代码,它应该用从 SQL 表中获取的值填充 QTableWidget 上的列.
I have been working on a small code which is supposed to fill up columns on a QTableWidget with values fetched from a SQL table.
这是一个小片段:
QString path = "C:\\ENTRIES.db";
QString itemToSearch = "ABC"; //This comes as a parameter to a slot actually, assigning it here for simplicity
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(path);
db.open();
QSqlQuery query(db);
query.prepare("SELECT * FROM METADATA WHERE ITEM LIKE ':item %'");
query.bindValue(":item", itemToSearch);
if(query.exec())
{
ui->tableWidgetSearchResults->setVisible(true);
ui->tableWidgetSearchResults->clearContents();
int rCount = ui->tableWidgetSearchResults->rowCount();
while(query.next())
{
ui->tableWidgetSearchResults->setRowCount(rCount + 1);
QTableWidgetItem *qtwParamName = new QTableWidgetItem;
qtwParamName->setFlags(qtwParamName->flags() & ~Qt::ItemIsSelectable & ~Qt::ItemIsEditable);
qtwParamName->setText(query.value(0).toString());
ui->tableWidgetSearchResults->setItem(rCount, 0, qtwParamName);
QTableWidgetItem *qtwParamValue = new QTableWidgetItem;
qtwParamValue->setFlags(qtwParamValue->flags() & ~Qt::ItemIsSelectable & ~Qt::ItemIsEditable);
qtwParamValue->setText(query.value(1).toString());
ui->tableWidgetSearchResults->setItem(rCount, 1, qtwParamValue);
rCount++;
}
}
else
{
qDebug() << "Error message: " << query.lastError().text() ;
ui->tableWidgetSearchResults->setHidden(true);
}
db.close();
当执行 query.value().toString());
行时,应用程序输出打印:
When executing query.value(<index here>).toString());
lines, the Application Output prints:
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
我不确定我在这里遗漏了什么.
I'm not sure of what I am missing here.
注意:我使用的是 Qt 5.6、MSVC 2013 编译器和 SQLite 3.8.
Note: I am using Qt 5.6, MSVC 2013 compiler and SQLite 3.8.
推荐答案
@CL.谢谢你的提示.我试过这条线,它奏效了:
@CL. Thanks for the hint. I tried this line and it worked:
query.prepare("SELECT * FROM METADATA WHERE ITEM LIKE '" + itemToSearch + "%'");
显然 bindValue
在这种情况下是不合适的.
Apparently bindValue
was inappropriate in this case.
这篇关于选择查询返回“值:未定位在有效记录上";在 Qt的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!