Разработка приложения баз данных, как и любого другого приложения Delphi, начинается с создания интерфейса — в первую очередь разрабатывается форма. Приложение может содержать произвольное число форм и использовать любой интерфейс (MDI или SDI). Обычно одна форма отвечает за выполнение группы однородных операций, объединенных общим назначением.
В основе работоспособности любого приложения баз данных лежат наборы данных, которые представляют собой группы записей, переданных из базы данных в приложение для просмотра и редактирования. (Подробно наборы данных рассмотрены в следующей главе.) Каждый набор данных инкапсулирован в специальном компоненте доступа к данным.; Эти компоненты располагаются на странице Data AccessПалитры компонентов.
В приложениях баз данных для работы с набором данных используются компоненты ТТаЫе и TQuery, которые обеспечивают создание набора данных для отдельной таблицы БД. Компонент ТТаЫе чаще используется в локальных приложениях. Подробное описание компонента ТТаЫе представлено в главе 16.
При работе с серверами БД чаще всего используется специальный язык SQL (Structured Query Language — язык структурированных запросов). Для обеспечения использования в приложении наборов данных, созданных на основе запросов SQL, применяется компонент TQuery. Подробно он рассматривается в следующей части.
Компонент TStoredProc также применяется в приложениях, работающих с серверами БД, и обеспечивает использование процедур — запросов SQL, которые хранятся на сервере, выполняют наиболее распространенные операции и специально оптимизированы на скорость выполнения.
Для обеспечения связи набора данных с компонентами отображения данных используется специальный компонент TDataSource. Его роль заключается в управлении потоками данных между набором данных и связанными с ним компонентами отображения данных.
Компоненты отображения данных расположены на странице Data Controls
Палитры компонентов. В большинстве они представляют собой модификации стандартных элементов управления, приспособленных для работы с набором данных (гл. 18).
Таким образом, для создания работоспособного приложения баз данных необходимо перенести в форму и настроить как минимум три компонента:
• компонент доступа к данным;
• компонент TDataSource;
• компонент отображения данных.
Рассмотрим схему взаимодействия этих компонентов в приложении баз данных (рис. 15.1).
Непосредственную связь приложения и базы данных осуществляет BDE. Процессор баз данных должен иметь установленный драйвер, через который запросы передаются в БД. Кроме этого, в BDE должен быть зарегистрирован псевдоним, который указывает местоположение файлов БД и тип используемого драйвера (см. предыдущую главу).
В приложении с BDE взаимодействует компонент доступа к данным, который инкапсулирует набор данных и обращается к функциям API BDE для выполнения различных операций. Компонент доступа к данным представляет собой "образ" таблицы базы данных в приложении. Общее число таких компонентов в приложении не ограничено.
С каждым компонентом доступа к данным должен быть связан как минимум один компонент TDataSource. В его обязанности входит соединение набора данных с компонентами отображения данных. Он отправляет в эти компоненты текущие значения полей из набора данных и передает обратно сделанные изменения.
Еще одна функция компонента TDataSource заключается в синхронизации поведения компонентов отображения данных с состоянием набора данных. Например, если набор данных не активен, то компонент TDataSource обеспечивает удаление данных из компонентов отображения данных и их перевод в неактивное состояние. Или, если набор данных работает в режиме "только для чтения", то компонент TDataSource обязан передать в компоненты отображения данных запрещение на изменение данных.
С одним компонентом TDataSource могут быть связаны несколько визуальных компонентов отображения данных. Эти компоненты представляют собой модифицированные элементы управления, которые предназначены для показа информации из наборов данных.
При открытии набора данных BDE обеспечивает передачу в набор данных записей из требуемой таблицы БД. Курсор набора данных устанавливается на первую запись. Компонент TDataSource организует передачу в компоненты отображения данных значений необходимых полей из текущей записи.
При перемещении по записям набора данных текущие значения полей в компонентах отображения данных автоматически обновляются.
Пользователь при помощи компонентов отображения данных может просматривать и редактировать данные. Измененные значения сразу же передаются из элемента управления в набор данных при помощи компонента TDataSource. Затем изменения могут быть переданы в базу данных или отменены.
Теперь, имея общее представление о работе приложения баз данных, перейдем к поэтапному рассмотрению процесса создания такого приложения.
Модуль данных
Для размещения компонентов доступа к данным в приложении баз данных можно использовать специальную форму — модуль данных. В нем можно размещать только невизуальные компоненты. Модуль данных доступен разработчику, как и любой другой модуль проекта. Пользователь приложения не может увидеть модуль данных во время выполнения.
Для создания модуля данных можно воспользоваться Репозиторием объектов. Значок модуля данных Data Moduleрасположен на странице New.
На самом деле, модуль данных имеет мало общего со стандартной формой хотя бы потому, что класс TDataModule происходит непосредственно от класса TComponent. У него почти полностью отсутствуют свойства и методы-обработчики событий, но так как его основное назначение — хранение других невизуальных компонентов, то этого минимума свойств вполне достаточно.
Интерфейс модуля данных состоит из двух частей.
Слева располагается иерархическое дерево, содержащее информацию о компонентах модуля данных. Компоненты, инкапсулирующие набор данных, содержат дополнительные данные. Для компонента ТТаЫе это:
• ограничения (Constraints);
• свойства полей (FieldDefs);
• поля (Fields);
• свойства индексов (IndexDefs).
Дерево компонентов удобно использовать для обращения к компонентам и полям.
Правая часть окна модуля данных отведена под двухстраничный блокнот.
Страница Components предназначена для размещения не визуальных компонентов доступа к данным
Страница Data Diagram используется для создания структуры (модели, диаграммы) данных, с которой работает приложение (рис. 15.3). Любой элемент из иерархического дерева компонентов можно перенести на страницу модели данных и задать связи между ними.
При помощи управляющих кнопок, расположенных между деревом и страницей, можно задавать между элементами диаграммы отношения главный/подчиненный и синхронизировать их просмотр. При этом производится автоматическая настройка свойств соответствующих компонентов.
Для того чтобы можно было обращаться из других модулей к компонентам доступа к данным, хранящимся в модуле данных проекта, необходимо включить имя файла модуля данных в секцию uses:
unit InterfaceModule;
implementation
uses DataModule;
DataModule. Tablel. Open;
Преимуществом размещения компонентов доступа к данным в модуле данных является то, что изменение значения любого свойства проявится сразу же во всех обычных модулях, к которым подключен этот модуль данных. Кроме этого, все обработчики событий этих компонентов, то есть вся логика работы с данными приложения, собраны в одном месте, что тоже весьма удобно.