Почему QSqlQuery query.next () возвращает false

0

Почему query.next() возвращает false, когда query.isSelected() и query.isActive() возвращают true. И данные для номеров столбцов и индекса 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;
}
Теги:
qt
qsqlquery

1 ответ

0

Кажется, что есть проблема с вашей базой данных.

bool QSqlQuery::isValid () const

Возвращает true, если запрос в настоящее время помещен в действительную запись; иначе возвращает false.

Это подтверждается тем фактом, что:

query.first()
query.last()

Получает последнюю запись в результате, если она доступна, и позиционирует запрос в полученной записи. {...] Возвращает true в случае успеха. Если неуспешно, позиция запроса установлена в недопустимую позицию и возвращается false.

Таким образом, вызывая эти методы, вы фактически перемещаете итератор в результатах (которые в любом случае не соответствуют действительности), то же самое с query.previous().

  • 0
    Но почему тогда: QSqlRecord sr = query.record(); int brsr = sr.count(); // -> returns correct number of columns возвращает правильное количество столбцов?
  • 0
    Это странно, вы пытались удалить запрос first (), last и т. Д. И выполнить простой простой запрос, не привязывая значение?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню