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

Есть слушающая таблица - foods:

введите сюда описание изображения

введите сюда описание изображения

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 и на нем запрос выполнить, но результат такой же.


Ответы (1 шт):

Автор решения: magrif

Таким запросом мы выбираем все элементы третьего столбца, затем в цикле итерируем уже по самим элементам из выборки:

query.prepare("SELECT name FROM foods");
query.exec();
QStringList V{};
while (query.next()) {
    V << query.value(0).toString(); // Black and white, Bread, Butterfingers, ...
}

После следующих вызовов prepare/exec будут другие данные.

→ Ссылка