Компонент доступа к данным является основой приложения баз данных. На основе выбранной таблицы БД он создает набор данных и позволяет эффективно управлять им. В процессе работы такой компонент тесно взаимодействует с функциями соответствующей технологии доступа к данным. Обычно доступ к функциональности технологии доступа к данным осуществляется через совокупность интерфейсов. Все компоненты доступа к данным являются невизуальными.
Для создания нового проекта достаточно выбрать команду New Application из меню File или воспользоваться Репозиторием объектов, который открывается командой New из меню File.
Примечание
Здесь рассматривается простейший вариант создания
приложения. В реальных проектах для размещения компонентов доступа к данным следует использовать модуль данных.
Затем на форму нового проекта необходимо перенести компонент, инкапсулирующий набор данных, и выполнить следующие действия. Последовательность действий рассмотрим для компонента, инкапсулирующего функции таблицы (см. гл. 12).
1. Подключить компонент к базе данных. Для этого, в зависимости от конкретной технологии, используется или специальный компонент, устанавливающий соединение, или прямое обращение к драйверу, интерфейсу или динамической библиотеке. Детально способы соединения рассматриваются в части IV.
2. Подключить к компоненту таблицу БД. Для этого используется свойство TableName, доступное в Инспекторе объектов. После выполнения действий первого этапа в списке этого свойства должны появиться имена всех доступных в подключенной базе данных таблиц. После выбора имени таблицы в свойстве TableName компонент оказывается связанным с ней.
3. Переименовать компонент. Это не обязательное действие. Тем не менее, в любых случаях желательно присваивать компонентам доступа к данным осмысленные имена, соответствующие названиям подключенных таблиц. Обычно название компонента копирует название таблицы (например, Orders или OrdTable илт tblOrders).
4. Активизировать связь между компонентом и таблицей БД. Для этого используется свойство Active. Если в Инспекторе объектов присвоить этому свойству значение True, то связь активизируется. Эту операцию можно выполнить и в исходном коде приложения. Также существует метод open, который открывает набор данных, и метод close, закрывающий его.
В качестве примера попробуем создать простейшее приложение баз данных, работающее с таблицей COUNTRY.DB из стандартной демонстрационной базы данных DBDEMOS через драйвер процессора Borland Database Engine.
На форму нового проекта необходимо перенести компонент TTаblе со страницы BDE Палитры компонентов. Свойство DatabaseName должно ссылаться на псевдоним DBDEMOS, который создается автоматически при установке Delphi, его можно выбрать из списка свойства DatabaseName. Для свойства TableName необходимо задать имя таблицы "COUNTRY.DB". Его также можно выбрать из списка. Двойной щелчок на свойстве Active в Инспекторе объектов присваивает ему значение True. После этого связь компонента с таблицей активизируется. Свойство Name имеет значение "CountryTable".
Открытие и закрытие набора данных можно предусмотреть как реакцию на действия пользователя или возникновение события. Чаще всего набор данных должен открываться при первом показе формы и закрываться при ее закрытии.
Листинг 11.1. Секция Implementation главного модуля проекта DemoDBApp
implementation
{$R *.DFM}
procedure TForml.FormShowfSender: TObject);
begin
try
CountryTable.Open;
except
ShowMessage('Table open error');
end;
end;
procedure TForml.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CountryTable.Close;
end;
end.
При открытии формы выполняется метод обработчик FormShow. В нем набор данных открывается при помощи метода Open. Обратите внимание на использование конструкции try..except, которая обеспечивает корректное завершение при возникновении исключительных ситуаций.
Так как ошибки в работе приложений баз данных могут привести к серьезным последствиям (потеря или искажение данных), то защитный код должен присутствовать во всех критических местах.
В методе-обработчике FormClose, который вызывается при закрытии формы, набор данных закрывается методом close.
Примечание
В принципе, для выполнения рассмотренных операций можно воспользоваться и свойством Active. Однако реальные операции выполняют указанные методы. Поэтому использование свойства является лишним этапом, да и с точки зрения ООП все действия должны выполнять методы объекта, а свойства служат только для представления значений. Свойство Active сигнализирует о состоянии набора данных.