Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
work_5.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
777.73 Кб
Скачать

Работа №5 Создание программного приложения для работы с базой данных

Цель работы: средствами SDK QT 4 создать программное приложение, которое обеспечивает работу с базой данных (БД). Изучить способы подключения к БД, представления данных из БД, выполнения простых и параметрических запросов, выполнения команд ЯМД.

5.1Теоретические сведения

5.1.1Система Interview Framework в sdk Qt 4

Система Interview Framework в SDK Qt 4 представляет собой вариант реализации парадигмы «модель-контроллер-вид». В основе парадигмы «модель-контроллер-вид» лежит старая и плодотворная идея разделения «движка» программы и интерфейса. В рамках парадигмы «модель-контроллер-вид» (подробно описанной в многочисленной литературе по «правильному» программированию) модель представляет собой, по сути, «движок» приложения. Именно модель определяет, что и как программа может делать. Термином вид (представление) фактически описывается все, что имеет непосредственное отношение к интерфейсу пользователя. Вид позволяет пользователю получать информацию о состоянии модели и передавать программе команды. Команды пользователя обрабатывает контроллер, который вносит соответствующие изменения в состояние модели или вида и, в частности, не позволяет пользователю нарушить целостность модели в результате введения неправильных команд. Как и многие другие парадигмы, призванные формализовать процесс создания программ, парадигма «модель-контроллер-вид» редко применяется на практике в чистом виде. В частности отдельные элементы парадигмы нередко объединяются друг с другом. Interview Framework превращает парадигму «модель-контроллер-вид» в парадигму «модель-вид», объединяя контроллер и вид в одно целое. Хотя парадигма «модель-контроллер-вид» (а, следовательно, и Interview Framework) может применяться при написании множества типов программ, она исключительно удобна именно для создания клиентских приложений для работы с базами данных. Поэтому на примере клиентского приложения БД проще всего понять, как работает Interview Framework. В клиентском приложении БД, использующем Interview Framework, модель выполняет роль посредника между БД и интерфейсом пользователя, представляющим данные БД. Именно модель определяет логику представления данных. Когда пользователь хочет получить информацию о текущем состоянии БД, пользовательский интерфейс (компонент «вид») обращается к модели напрямую. Для работы с отдельными элементами данных служат делегаты, которые предают команды пользователя модели.

В основе системы Interview Framework лежат три абстрактных класса QAbstractItemModel, QAbstractItemView и QAbstractItemDelegate. Эти классы являются предками всех классов, реализующих, соответственно, модели, представления (виды) и делегаты.

Классы QTableView, QTreeView и QListView, являющиеся потомками QAbstractItemView, реализуют три наиболее популярные формы представления данных: таблицу, дерево и простой список. Если разработчику требуется более сложный компонент отображения модели, ему придется создавать собственный класс, основанный на QAbstractItemView.

Среди потомков QAbstractItemModel отметим QStandardItemModel, QDirModel, QStringListModel, QAbstractTableModel, QAbstractListModel, QSqlQueryModel, QSqlTableModel и QSqlRelationalTableModel.

Класс QStandardItemModel представляет собой реализацию модели в самом общем смысле. Помимо прочего, этот класс реализует ряд методов, предназначенных для работы с индексами. Индексы используются в Interview Framework для указания элементов данных, с которыми работает модель.

Класс QDirModel реализует модель для работы с директориями. Этот класс будет полезен при писании собственного файл-менеджера или нестандартной версии диалоговых окон открытия и сохранения файла. Следует отметить, что один и тот же объект, реализующий модель, может взаимодействовать (в том числе, одновременно) с объектами нескольких разных классов, отвечающими за представление данных. Например, QDirModel может использовать для представления информации о директориях классы QTableView, QTreeView, и QListView.

Класс QStringListModel, как можно догадаться по его названию, реализует модель, основой которой является список строк.

Классы QAbstractTableModel и QAbstractListModel могут служить основой для классов-моделей, предполагающих представление данных в виде таблиц и списков соответственно. Такие классы как QTreeView и QListView предназначены для работы с моделями, но использовать их в качестве самостоятельных виджетов затруднительно. Для решения этой проблемы на базе классов QTableView, QTreeView и QListView созданы классы QTableWidget, QTreeWidget и QListWidget. Объекты этих классов представляют собой обычные визуальные компоненты, при работе с которыми пользователь может добавлять и удалять данные, не заботясь о моделях и делегатах. На самом деле, эти классы просто реализуют свои собственные модели данных, незаметные для пользователя.

Классы QSqlQueryModel, QSqlTableModel и QSqlRelationalTableModel относятся к специальным классам для работы с базами данных и предназначены для создания модели приложения БД. Из этих трех классов QSqlQueryModel – самый простой. Его возможности, фактически, ограничиваются передачей результата запроса к базе данных. При этом, правда, стоит отметить, что класс QSqlQueryModel обладает определенными возможностями, позволяющими изменить структуру отображения данных перед передачей ее на уровень представления. Класс QSqlTableModel гораздо функциональнее. Этот класс логически организует результаты SQL-запросов как таблицы и включает в себя функции редактирования данных. Наконец класс QSqlRelationalTableModel позволяет задействовать в приложении основные возможности реляционной модели баз данных – работу с данными из нескольких таблиц, связанных внешними ключами. Для представления данных моделей SQL наиболее логично использовать объекты класса QTableView (хотя унифицированная структура Interview Framework позволяет использовать совместно с SQL-моделями и другие стандартные «виды», они, как правило, менее удобны и информативны при работе с данными БД).

Для создания программного приложения, взаимодействующего с БД, в среде разработки Qt 4 существует специальный модуль – QtSql, который обеспечивает независимый от платформы и типа СУБД интерфейс для доступа с помощью языка SQL к базам данных. Этот интерфейс поддерживается набором классов, использующих архитектуру Qt модель/представление для интеграции средств доступа к БД с интерфейсом пользователя.

Классы модуля QtSql делятся на три уровня:

  • уровень драйверов;

  • программный уровень;

  • уровень пользовательского интерфейса.

К первому уровню относятся классы для получения данных на физическом уровне. Это такие классы, как QSqlDriver, QSqlDriverCreator<T*>, QSqlDriverCreatorBase, QSqlDriverPlugin и QSqlResult. Данные классы используются при написании разработчиками собственных драйверов БД.

Классы второго уровня предоставляют программный интерфейс для обращения к БД. К ним относятся: QSqlDatabase, QSqlQuery, QSqlError, QSqlField, QSqlIndex и QSqlRecord.

Третий уровень предоставляет модели для отображения результатов запросов. Эти модели представлены следующими классами: QSqlQueryModel, QSqlTableModel и QSqlRelationalTableModel.

Связь с БД обеспечивается объектом класса QSqlDatabase. Qt использует драйверы для связи с программным интерфейсом различных баз данных. Версия Qt для настольных компьютеров (Qt Desktop Edition) включает в себя драйверы, приведенные в таблице 1.1.

Таблица 1.1 – Драйверы, поддерживаемые QT

Драйвер

База данных

QDB2

IBM DB2 версии 7.1 и выше

QIBASE

InterBase компании Borland

QMYSQL

MySQL

QОCI

Oracle (Oracle Call Interface - интерфейс вызовов Oracle)

QОDBC

ODBC (включая Microsoft SQL Server)

QPSQL

PostgreSQL версий 6.x и 7.x

QSQUTE

SQLite версии 3 и выше

QSQUTE2

SQLite версии 2

QTDS

Sybase Adaptive Server

Из-за лицензионных ограничений не все драйверы входят в состав Qt с открытым исходным кодом (Qt Open Source Edition). Если драйвер не поставляется с Qt, то можно его собрать.

Ниже описывается как с помощью ОDBC можно настроить источник данных и подключиться к БД.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]