oleja1ee7
@oleja1ee7

Как извлечь все значения из QTableWidget?

Здравствуйте,
есть tableWidget в нем всегда различное количество строк, но один столбец.
Можно ли каким-либо способом подставить все Значения из этой таблицы в SQL запрос:
SELECT *
FROM Universities
WHERE Location IN ('Novosibirsk', 'Perm')


В скобки вместо Новосибирска и Перми?
Делать как-то с помощью цикла извлекая значения по одному?
  • Вопрос задан
  • 325 просмотров
Решения вопроса 1
myjcom
@myjcom
UPD
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "memdb");
db.setDatabaseName(":memory:");

if (!db.open())
{
    qDebug() << db.lastError().text();
    // std::exit(1);
}

QSqlQuery q("", db);
q.exec("create table Universities (id integer primary key, Location varchar, Population integer)");
q.exec("insert into Universities values (0, 'MSK', 12000000)");
q.exec("insert into Universities values (1, 'NSK', 1600000)");
q.exec("insert into Universities values (2, 'SPB', 6000000)");
q.exec("insert into Universities values (3, 'PRM', 1000000)");

int sz = ui->tableWidget->rowCount();

QString queryString = "SELECT * FROM Universities WHERE Location IN (";
for(int i = 0; i < sz; ++i)
{
    queryString += "?,";
}
queryString.back() = ')';

QSqlQuery query(queryString, db);

for(int i = 0; i < sz; ++i)
{
  query.bindValue(i, ui->tableWidget->item(i, 0)->text());
}

if (!query.exec())
{
  qDebug() << query.lastError().text();
  // std::exit(1);
}

while(query.next())
{
  qDebug() << query.value(0).toInt() << " "
           << query.value(1).toString() << " "
           << query.value(2).toInt() << "\n";
}

old
doc.qt.io/qt-5/qsqlquery.html#addBindValue
QSqlQuery query;
query.prepare("SELECT * FROM Universities WHERE Location IN (?)");

int sz = ui->tableWidget->rowCount();

QVariantList values;
for(int i = 0; i < sz; ++i)
{
  values << ui->tableWidget->item(i, 0)->text();
}
    
query.addBindValue(values);
if (!query.execBatch())
{
  qDebug() << query.lastError();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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