Вход/Регистрация
QT 4: программирование GUI на С++
вернуться

Саммерфилд Марк

Шрифт:

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;

}

Если имеется запись, удовлетворяющая заданному фильтру, доступ к ней мы получаем при помощи функции QSqlTableModel::record. Мы осуществляем наши изменения и вновь записываем в базу данных запись с новыми значениями полей.

Кроме того, обновление можно выполнить при помощи функции setData, как это делается для модели, отличной от SQL—модели. Для получения доступа к полям записи используются индексы модели с указанием номера строки (записи) и столбца (поля):

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;

}

В вызове removeRows указываются номер строки первой удаляемой записи и количество удаляемых записей. В следующем примере удаляются все записи, удовлетворяющие фильтру:

model.setTable("cd");

model.setFilter("year < 1990");

model.select;

if (model.rowCount > 0) {

model.removeRows(0, model.rowCount);

model.submitAll;

}

Классы QSqlQuery и QSqlTableModel обеспечивают интерфейс между Qt и базой данных SQL. Используя эти классы, можно создавать формы, представляющие данные пользователям и позволяющие им вставлять, обновлять и удалять записи.

Представление данных в табличной форме

Во многих случаях табличное представление является самым простым представлением набора данных для пользователей. В этом и последующих разделах мы рассмотрим простое приложение CD Collection (Коллекция компакт-дисков), в котором модель QSqlTableModel и ее подкласс QSqlRelationalTableModel используются для просмотра и взаимодействия пользователей с данными, хранимыми в базе данных.

Главная форма показывает представление «master—detail» для компакт-дисков и дорожек текущего компакт-диска (рис. 13.1).

Рис. 13.1. Приложение CD Collection.

В приложении используются три таблицы, определенные следующим образом:

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,

year INTEGER N0T NULL,

FOREIGN KEY (artistid) REFERENCES artist);

CREATE TABLE track (

id INTEGER PRIMARY KEY,

title VARCHAR(40) NOT NULL,

duration INTEGER NOT NULL,

cdid INTEGER NOT NULL,

FOREIGN KEY (cdid) REFERENCES cd);

Некоторые базы данных не поддерживают внешние ключи. В этом случае мы должны убрать фразы FOREIGN KEY. Пример будет все-таки работать, но база данных не будет поддерживать целостность на уровне ссылок.

Рис. 13.2. Таблицы приложения CD Collection.

В этом разделе мы создадим диалоговое окно, позволяющее пользователю редактировать список артистов, используя простую форму с таблицей. Пользователь может вставлять, обновлять или удалять артистов при помощи кнопок формы. Обновления можно делать напрямую, просто редактируя текст ячеек. Изменения вносятся в базу данных при нажатии пользователем кнопки Enter или при переходе на другую запись.

  • Читать дальше
  • 1
  • ...
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: