Для вставки записи в таблицу базы данных мы действуем так же, как если бы делали вставку в двумерную модель: сначала вызываем функцию
QSqlTableModel model;
model.setTable("cd");
int row = 0;
model.insertRows(row, 1);
model.setData(model.index(row, 0), 113);
model.setData(model.index(row, 1), "Shanghai My Heart");
model.setData(model.index(row, 2), 224);
model.setData(model.index(row, 3), 2003);
model.submitAll;
После вызова
Важным отличием модели SQL от стандартной модели является необходимость вызова в модели SQL функции
Для обновления записи мы должны сначала установить
QSqlTableModel model;
model.setTable("cd");
model.setFilter("id = 125");
model.select;
if (model.rowCount == 1) {
QSqlRecord record = model.record(0);
record.setValue("title", "Melody A.M.");
record.setValue("year", record.value("year").toInt + 1);
model.setRecord(0, record);
model.submitAll;
}
Если имеется запись, удовлетворяющая заданному фильтру, доступ к ней мы получаем при помощи функции
Кроме того, обновление можно выполнить при помощи функции
model.select;
if (model.rowCount == 1) {
model.setData(model.index(0, 1), "Melody A.M.");
model.setData(model.index(0, 3),
model.data(model.index(0, 3)).toInt + 1);
model.submitAll;
}
Удаление записи напоминает ее обновление:
model.setTable("cd");
model.setFilter("id = 125");
model.select;
if (model.rowCount == 1) {
model.removeRows(0, 1);
model.submitAll;
}
В вызове
model.setTable("cd");
model.setFilter("year < 1990");
model.select;
if (model.rowCount > 0) {
model.removeRows(0, model.rowCount);
model.submitAll;
}
Классы
Представление данных в табличной форме
Во многих случаях табличное представление является самым простым представлением набора данных для пользователей. В этом и последующих разделах мы рассмотрим простое приложение CD Collection (Коллекция компакт-дисков), в котором модель
Главная форма показывает представление «master—detail» для компакт-дисков и дорожек текущего компакт-диска (рис. 13.1).
В приложении используются три таблицы, определенные следующим образом:
CREATE TABLE artist (
id INTEGER PRIMARY KEY,
name VARCHAR(40) NOT NULL,
country VARCHAR(40));
CREATE TABLE cd (
id INTEGER PRIMARY KEY,
title VARCHAR(40) NOT NULL,
artistid INTEGER NOT NULL,