QT 4: программирование GUI на С++
Шрифт:
После вызова submitAll запись может быть перемещена в другую позицию, зависящую от упорядоченности таблицы. Вызов submitAll возвратит false, если вставка окажется неудачной.
Важным отличием модели SQL от стандартной модели
Для обновления записи мы должны сначала установить QSqlTableModel на запись, которую мы хотим модифицировать (например, используя функции select). Затем мы извлекаем запись, обновляем соответствующие поля и записываем наши изменения обратно в базу данных:
Если имеется запись, удовлетворяющая заданному фильтру, доступ к ней мы получаем при помощи функции QSqlTableModel::record. Мы осуществляем наши изменения и вновь записываем в базу данных запись с новыми значениями полей.
Кроме того, обновление можно выполнить при помощи функции setData, как это делается для модели, отличной от SQL—модели. Для получения доступа к полям записи используются индексы модели с указанием номера строки (записи) и столбца (поля):
Удаление записи напоминает ее обновление:
В вызове removeRows указываются номер строки первой удаляемой записи и количество удаляемых записей. В следующем примере удаляются все записи, удовлетворяющие фильтру:
Классы QSqlQuery и QSqlTableModel
Представление данных в табличной форме
Во многих случаях табличное представление является самым простым представлением набора данных для пользователей. В этом и последующих разделах мы рассмотрим простое приложение CD Collection (Коллекция компакт-дисков), в котором модель QSqlTableModel и ее подкласс QSqlRelationalTableModel используются для просмотра и взаимодействия пользователей с данными, хранимыми в базе данных.
Главная форма показывает представление «master—detail» для компакт-дисков и дорожек текущего компакт-диска (рис. 13.1).
Рис. 13.1. Приложение CD Collection.
В приложении используются три таблицы, определенные следующим образом:
Некоторые базы данных не поддерживают внешние ключи. В этом случае мы должны убрать фразы FOREIGN KEY. Пример будет все-таки работать, но база данных не будет поддерживать целостность на уровне ссылок.
Рис. 13.2. Таблицы приложения CD Collection.
В этом разделе мы создадим диалоговое окно, позволяющее пользователю редактировать список артистов, используя простую форму с таблицей. Пользователь может вставлять, обновлять или удалять артистов при помощи кнопок формы. Обновления можно делать напрямую, просто редактируя текст ячеек. Изменения вносятся в базу данных при нажатии пользователем кнопки Enter или при переходе на другую запись.