Select query returns “value: not positioned on a valid record” in Qt

≯℡__Kan透↙ 提交于 2020-01-17 08:16:11

问题


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.

Here's a small snippet:

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();

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.

Note: I am using Qt 5.6, MSVC 2013 compiler and SQLite 3.8.


回答1:


@CL. Thanks for the hint. I tried this line and it worked:

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

Apparently bindValue was inappropriate in this case.



来源:https://stackoverflow.com/questions/43973276/select-query-returns-value-not-positioned-on-a-valid-record-in-qt

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!