SQL и Qt

QSqlQueryModel: показываем результат SQL-запроса в таблице Qt

Модель только для чтения из SQL-запроса

QSqlQueryModel связывает результат произвольного SQL-запроса с представлением Qt. Это удобно для отчётов и сложных выборок, когда редактирование напрямую через таблицу не требуется.

auto *model = new QSqlQueryModel(this);
model->setQuery(
    "SELECT name, created_at FROM projects ORDER BY created_at DESC",
    database);
if (model->lastError().isValid()) {
    qWarning() << model->lastError().text();
}
model->setHeaderData(0, Qt::Horizontal, "Проект");
model->setHeaderData(1, Qt::Horizontal, "Создан");
ui->tableView->setModel(model);

Проверяйте lastError() после выполнения запроса, особенно при динамическом SQL и изменениях схемы. Для значений от пользователя применяйте подготовленный QSqlQuery с параметрами, а не склеивайте строку запроса.

Когда нужна редактируемая таблица

QSqlQueryModel не предназначена для редактирования результата. Для простой таблицы базы данных рассмотрите QSqlTableModel, а для связанных таблиц — QSqlRelationalTableModel. Если же запрос объединяет таблицы или вычисляет агрегаты, оставьте его в режиме чтения и отдельно реализуйте команду изменения данных с проверкой результата.