ДК
Джон Кофи23 апреля 2020 г. 5:11

SQL take a value

SQLite

Привет. Не получается забрать значение с query.
Вот такой метод отрабатывает верно, то есть, если у меня поле weight = 3, то 3 и вернет

int ReportDataBase::getWeight(const int reportID) const
{
    int weight = 0;
    QSqlQuery query(db);
    QString queryString = QString("SELECT weight FROM reports WHERE id=")+QString::number(reportID);
    query.prepare(queryString);
    query.exec(queryString);
    if(query.isActive()) {
        if(query.next()) {
            const QSqlRecord record = query.record();
            weight = query.value(record.indexOf("weight")).toInt();
        }
    }
    return weight;
}

но вот аналогичный метод, уже пишет ошибку
QSqlQuery::value: not positioned on a valid record
в строке
query.value(record.indexOf("weight")).toInt()

int ReportDataBase::getLowerWeight() const
{
    int weight = 0;
    QSqlQuery query(db);
    QString queryString = QString("SELECT MAX(weight) FROM reports");
    query.prepare(queryString);
    query.exec(queryString);
    if(query.isActive()) {
        if(query.next()) {
            const QSqlRecord record = query.record();
            weight = query.value(record.indexOf("weight")).toInt();
        }
    }
    return weight;
}

при чем, в отладчике я вижу нужное мне значение, вот оно

но всё-равно ставит weight = 0, как так-то? код же аналогичный! скрипт рабочий! я в SQLite проверял этот запрос.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

5
Evgenii Legotckoi
  • 23 апреля 2020 г. 5:21
  • Ответ был помечен как решение.

Добрый день

Есть мысль, что там нужно имя задать для результата. Скорее всего возвращается результат выполнения с именем, отличным от weight

Напишите так

int ReportDataBase::getLowerWeight() const
{
    int weight = 0;
    QSqlQuery query(db);
    QString queryString = QString("SELECT MAX(weight) AS weight_result FROM reports");
    query.prepare(queryString);
    query.exec(queryString);
    if(query.isActive()) {
        if(query.next()) {
            const QSqlRecord record = query.record();
            weight = query.value(record.indexOf("weight_result")).toInt();
        }
    }
    return weight;
}
    ДК
    • 23 апреля 2020 г. 5:27

    огромное вам спасибо! я вчера сидел с этой фигней часов до 11 вечера и потом в отлачике нашел ошибку, ну думаю, делов на 5 минут, решил лечь спать и проснуться сегодня пораньше и доделать успеть. В итоге, с 7 утра уже часов 5, как слепой котенок наугад, идеи все кончились и гугл тоже) А так работает! Еще раз спасибо!

      Evgenii Legotckoi
      • 23 апреля 2020 г. 5:31

      Внутренние функции SQL типо max, min генерируют имена для колонок наподобие max_weight.
      Уверен, что если написать так, то тоже заработает

      int ReportDataBase::getLowerWeight() const
      {
          int weight = 0;
          QSqlQuery query(db);
          QString queryString = QString("SELECT MAX(weight) FROM reports");
          query.prepare(queryString);
          query.exec(queryString);
          if(query.isActive()) {
              if(query.next()) {
                  const QSqlRecord record = query.record();
                  weight = query.value(record.indexOf("max_weight")).toInt();
              }
          }
          return weight;
      }
      

      Ваш запрос генерирует новую таблицу, а не просто забирает пачку записей из существующих, поэтому нужно либо явно задавать имя колонки, либо понимать логику генерирования имён новых колонок в зависимости от внутренних функций SQL

        ДК
        • 23 апреля 2020 г. 5:37

        спасибо за пояснения!

          ИП
          • 23 апреля 2020 г. 5:52
          int ReportDataBase::getLowerWeight() const
          {
              //int weight = 0;
              QSqlQuery query(db);
              QString queryString = QString("SELECT MAX(weight) AS max_weight FROM reports");
              //query.prepare(queryString);//подготовленный запрос здесь не нужен
              //query.exec(queryString);
              if(query.exec(queryString))
              {
                  if(query.first()) //если в результате только одна строка
                  {
                      //const QSqlRecord record = query.record(); 
                      return query.value("max_weight").toInt();
                  }
                  else 
                  {}//здесь можно обработать ситуацию когда таблица пустая или запрос сработал и вернул пустую строку
              }
              else
              {} //здесь можно обработать ошибку запроса
              return -1;
          }
          

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            AD

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:50баллов,
            • Очки рейтинга-4
            m
            • molni99
            • 26 октября 2024 г. 1:37

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:80баллов,
            • Очки рейтинга4
            m
            • molni99
            • 26 октября 2024 г. 1:29

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:20баллов,
            • Очки рейтинга-10
            Последние комментарии
            i
            innorwall11 ноября 2024 г. 22:12
            Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
            i
            innorwall11 ноября 2024 г. 18:23
            QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
            i
            innorwall11 ноября 2024 г. 15:50
            Qt/C++ - Урок 052. Кастомизация Qt Аудио плеера в стиле AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
            i
            innorwall11 ноября 2024 г. 14:19
            Алгоритм сортировки кучей The role of raloxifene in preventing breast cancer priligy precio
            i
            innorwall11 ноября 2024 г. 13:55
            PyQt5 - Урок 006. Работа с QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
            Сейчас обсуждают на форуме
            i
            innorwall11 ноября 2024 г. 20:56
            добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
            i
            innorwall11 ноября 2024 г. 10:55
            Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
            9
            9Anonim25 октября 2024 г. 9:10
            Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
            ИМ
            Игорь Максимов3 октября 2024 г. 4:05
            Реализация навигации по разделам Спасибо Евгений!

            Следите за нами в социальных сетях