BadCats
@BadCats

Qt SqlLite пустой список после обычного SELECT запроса при непустой таблице?

Есть слушающая таблица - foods:
5ea2ae5b31350683691510.png
5ea2ae65e3d43783752973.png
void MainWindow:: createConnection()
{
    dbase =   QSqlDatabase::addDatabase("QSQLITE", "foods");
    dbase.setDatabaseName(databaseName + ".db");
    dbase.open();
    if (!dbase.open()) {
        msgBox.setText("Cant connect to database.Cant open datbase file.");
        msgBox.exec();
    }
    else
    {
        QSqlQuery  d(dbase);
        d.prepare("SELECT COUNT(*) FROM foods");
        d.exec();
        int rows ;
        if (d.next()) {
            rows= d.value(0).toInt();
        }

        d.prepare("SELECT * FROM foods");
        d.exec();
        int columns= d.record().count();
        ui->tableWidget->setColumnCount(columns);
        ui->tableWidget->  setRowCount(rows);
        for (int var = 0; var < columns; ++var)
        {
            ui->tableWidget->setHorizontalHeaderItem(var, new QTableWidgetItem(d.record().fieldName(var)));
        }
       if( d.prepare("SELECT name FROM foods"));
       {
        d.exec();
        QList<QVariant> V;
        if (d.next()) {
            V= d.value(0).toList();
        }
        for (int var = 0; var < rows; ++var)
        {
            ui->tableWidget->item(var,0)->setText(V.at(var).toString());
        }
}
    }
}


Причем, вот эта часть :
d.prepare("SELECT COUNT(*) FROM foods");
        d.exec();
        int rows ;
        if (d.next()) {
            rows= d.value(0).toInt();
        }

- возвращает реальное число строк таблицы,
но список V - остается пустым на 0 элементов:
if( d.prepare("SELECT name FROM foods"));
       {
        d.exec();
        QList<QVariant> V;
        if (d.next()) {
            V= d.value(0).toList();
        }

Уже и пробовал создавать новый запрос QSqlQuery - d1 и на нем запрос выполнить, но результат такой же.
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Gytim
Из таблицы возвращается список значений,
по списку надо проходить через цикл,
следующее значение получается через d.next
(советую почитать про итераторы)

а этот вариант работает т.к. значение только 1шт
d.prepare("SELECT COUNT(*) FROM foods");
        d.exec();
        int rows ;
        if (d.next()) {
            rows= d.value(0).toInt();
        }
Ответ написан
Комментировать
kkmspb
@kkmspb
хобби C++, Qt, десктоп, микроконтроллеры STM32
Надо смотреть, что d.exec() возвращает true, в противном случае смотрим d.lastError().text().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы