选择查询返回"值:未定位在有效记录上#34;在Qt

时间:2017-05-15 07:01:46

标签: c++ qt sqlite

我一直在研究一个小代码,该代码应该填充QTableWidget上的列,其中包含从SQL表中获取的值。

这是一个小片段:

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(<index here>).toString());行时,应用程序输出打印:

QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record

我不确定我在这里缺少什么。

注意:我使用的是Qt 5.6,MSVC 2013编译器和SQLite 3.8。

1 个答案:

答案 0 :(得分:0)

@CL。谢谢你的提示。我试过这一行并且有效:

query.prepare("SELECT * FROM METADATA WHERE ITEM LIKE '" + itemToSearch + "%'");

显然bindValue在这种情况下是不合适的。