为什么QSqlQuery query.next()返回false

时间:2014-02-28 09:52:41

标签: c++ qt qsqlquery

query.next()query.isSelected()返回true时,为什么query.isActive()返回false。并且EventNote的列号和索引的数据是正确的。

以下是代码:

QVector<QString> DataBase::GetEventNote(int eventId)
 {

        QSqlQuery query;
        query.prepare("SELECT * FROM Events WHERE idEvent=(?)");
        query.addBindValue("eventId");

    if(!query.exec())       // -> returns true
    {
        QMessageBox mb;
        mb.setText(query.lastError().text());
        mb.setWindowIcon(QIcon("icon.png"));
        mb.exec();
    }
    QVector<QString> debug1;
    bool v = query.isValid(); // -> returns false
    bool s = query.isSelect(); // -> returns true
    bool a = query.isActive(); // -> returns true
    bool b = query.first(); // -> returns false
    bool l = query.last(); // -> returns false
    bool p = query.previous(); // -> returns false
    QSqlRecord sr = query.record();
    int brsr = sr.count(); // -> returns correct number of columns
    QString str = query.lastQuery();

    const QSqlResult *r =query.result();

    int nameCol = sr.indexOf("EventNote"); // index of the field "EventNote" is correct (index 5)

    while (query.next()) // -> returns false
    {
        QString debug2 =  query.value(nameCol).toString(); // output all EventNote
        debug1.push_back(debug2);
    }


    return debug1;
}

1 个答案:

答案 0 :(得分:0)

您的数据库似乎存在问题。

bool QSqlQuery::isValid () const

如果查询当前位于有效记录上,则返回true;否则返回false。

这是由以下事实强制执行的:

query.first()
query.last()

检索结果中的最后一条记录(如果可用),并将查询定位在检索到的记录上。 {...]如果成功则返回true。 如果查询位置设置为无效位置不成功,则返回false。

因此,通过调用这些方法,您实际上是在结果中移动迭代器(无论如何都不是有效记录),与query.previous()相同。