0

Whyquery.next()は false を返し、when はtruequery.isSelected()query.isActive()返します。また、列番号とインデックスのデータ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;
}
4

1 に答える 1

0

データベースに問題があるようです。

bool QSqlQuery::isValid () const

クエリが現在有効なレコードに配置されている場合は true を返します。それ以外の場合は false を返します。

これは、次の事実によって強制されます。

query.first()
query.last()

利用可能な場合、結果の最後のレコードを取得し、取得したレコードにクエリを配置します。{...] 成功した場合は true を返します。失敗した場合、クエリの位置は無効な位置に設定され、false が返されます。

したがって、これらのメソッドを呼び出すことで、実際には結果のイテレータを移動しています (とにかく有効なレコードではありません)、query.previous() と同じです。

于 2014-02-28T10:14:56.877 に答える