Классы SQL-моделей для Интервью
Оглавление
- Программирование баз данных с помощью Qt
- Использование QtSql в библиотеке Qt
- Соединение с базой данных с помощью Qt
- Исполнение команд SQL в Qt
- Классы SQL-моделей для Интервью
Модуль QtSql поддерживает концепцию Интервью, предоставляя целый ряд моделей для использования их в представлениях. Класс QSqlTableModel позволяет, например, отображать данные в табличной и иерархической форме.
Использование Интервью — это самый простой способ отобразить данные таблицы. Здесь не потребуется цикла для прохождения по строкам таблицы.
Программа, окно которой отображено на рисунке, демонстрирует такую возможность.
{рисунок}
int main(int argc, char** argv)
{
QApplication app(argc, argv);
if (!createConnection()) {
return -1;
}
QTableView view;
QSqlTableModel model;
model.setTable("addressbook");
model.select();
model.setEditStrategy(QSqlTableModel::OnFieldChange);
view.setModel(&model);
view.show();
return app.exec();
}
После соединения с базой данных, проводимого с помощью функции createConnection(), создается объект табличного представления QTableView и объект табличной модели QSqlTableModel. Вызовом метода setTable() мы устанавливаем актуальную базу в модели. Вызов метода select() производит заполнение данными.
Теперь настало время немного рассказать о возможностях редактирования и записи данных. Класс QSqlTableModel предоставляет для этого три следующие стратегии редактирования, которые устанавливаются с помощью метода setEditStrategy():
- onRowChange — производит запись данных, как только пользователь перейдет к другой строке таблицы;
- onFieldChange — производит запись данных после того, как пользователь перейдет к другой ячейке таблицы;
- OnManualSubmit —записывает данные по вызову слота submitAl(). Если вызывается слот revertAll(), то данные возвращаются в исходное состояние.
Какая из стратегий вам больше подходит, должны выбрать вы сами. В примере мы используем, вызовом метода setEditStrategy(), стратегию QSqlTableModel::OnFieldChange. Теперь данные нашей модели можно изменять после двойного щелчка на ячейке. В завершение мы устанавливаем модель в представлении вызовом метода setModel().
Если вам понадобится произвести отображение данных какого-либо конкретного опроса SELECT, то для этого целесообразнее будет воспользоваться другим классом SQL-моделей — классом QSqlQueryModel. Листинг ниже иллюстрирует отображение только электронных адресов и телефонных номеров всех контактов с именем Piggy. В нашем случае он будет всего лишь один.
int main(int argc, char** argv)
{
QApplication app(argc, argv);
if (!createConnection()) {
return -1;
}
QTableView view;
QSqlQueryModel model;
model.setQuery("SELECT phone, email "
"FROM addressbook "
"WHERE name = 'Piggy';"
);
if (model.lastError().isValid()) {
qDebug() << model.lastError();
}
view.setModel(&model);
view.show();
return app.exec();
}
Здесь мы создаем табличное представление QTableView и модель опроса QSqlQueryModel. Строка запроса передается в метод setQuery(), после чего результат выполнения запроса проверяется в операторе if на наличие проблем исполнения, с помощью метода lastError(). Неверный объект класса QSqlError, возвращаемый этим методом, означает, что ошибок нет и никаких проблем не произошло. Это проверяется методом isValid(). Возникновение проблем повлечет их отображение в qDebug(). В завершение, модель устанавливается в представлении вызовом метода setModel().
Читать далее: Программирование поддержки сети в Qt