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 будут другие данные.

