Опубликован: 20.12.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 12:

Реализация доступа к базам данных в среде DELPHI

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

Компоненты управления данными расположены на странице Data Controls палитры компонентов. Многие из этих компонентов аналогичны элементам управления страницы Standard, с тем лишь отличием, что связаны через источник данных (компонент типа TDataSource ) с определенным полем (или полями) из набора данных (компонентов типа TTable или TQuery ).

Библиотека VCL предоставляет следующие классы компонентов управления данными:

  • TDBGrid - класс, позволяющий отображать записи набора данных в виде таблицы и управлять этими записями.
  • TDBNavigator - класс, предоставляющий средства навигации по набору данных, а также возможности добавления новых записей, включения режима редактирования, присвоения и отмены сделанных изменений. Для того чтобы программно инициировать действие, выполняемое по щелчку на кнопке навигатора, следует вызвать метод BtnClick. Например:

    DBNavigator1.BtnClick(nbPost); // Присвоение сделанных изменений.

    Компонент TDBNavigator может отображать кнопки, указываемые следующими константами:

    nbFirst - переход к первой записи;

    nbPrior - переход к предыдущей записи;

    nbNext - переход к следующей записи;

    nbLast - переход к последней записи;

    nbInsert - вставка перед текущей записью новой записи и переход на нее;

    nbDelete - удаление текущей записи;

    nbEdit - переход в режим редактирования текущей записи;

    nbPost - внесение изменений текущей записи в базу данных;

    nbCancel - отмена изменений, сделанных в текущей записи;

    nbRefresh - повторное считывание значений полей из источника данных.

  • TDBText - класс, позволяющий в качестве надписи отображать значение поля текущей записи набора данных.
  • TDBEdit - класс, реализующий работу с однострочным полем редактирования.
  • TDBMemo - класс, реализующий многострочное поле редактирования, в котором можно отображать и изменять значение поля набора данных.
  • TDBImage - класс, реализующий объект "рисунок", в котором можно отображать и изменять значение поля набора данных формата BLOB.
  • TDBRadioGroup - класс, реализующий группу радиокнопок, которые связаны с полем базы данных. Применение такого объекта предоставляет пользователю удобную возможность устанавливать значение поля базы данных, выбирая его из предлагаемых опций.
  • TDBCheckBox - класс, реализующий компонент "флажок", который связан с полем базы данных.
  • TDBListBox - класс, реализующий компонент "список", который используется для отображения значений поля набора данных. Значения, отображаемые в списке, содержатся в свойстве Items.
  • TDBComboBox - класс, реализующий компонент "раскрывающийся список", который используется для отображения значений поля набора данных. Значения, отображаемые в списке, содержатся в свойстве Items.
  • TDBLookupListBox - класс, позволяющий выполнять просмотр списка, заполненного значениями полей из другого набора данных. Просматриваемый набор данных указывается свойством ListSource, просматриваемое поле (или поля) - свойством ListField. Свойство KeyField указывает поле просматриваемого набора данных, соответствующее полю текущего набора данных, указываемого свойствами DataField и DataSource. Данный класс позволяет выбирать значение поля текущего набора данных из другого просматриваемого набора данных;
  • TDBCtrlGrid - класс, реализующий особый вид таблицы, в которой каждая запись отображается на отдельной панели (количество панелей в компоненте указывается значением свойства RowCount ).

События, инициируемые для наборов данных

При работе с наборами данных могут инициироваться следующие события:

  • AfterCancel и BeforeCancel - происходит после/до отмены в приложении всех изменений, сделанных для текущей записи.
  • AfterClose и BeforeClose - происходит после/до закрытия набора данных и перевода базы данных в состояние dsInactive.
  • AfterDelete и BeforeDelete - инициируется после/до удаления приложением текущей записи, перевода набора данных в состояние dsBrowse и перемещения позиции курсора на предыдущую запись.
  • AfterEdit и BeforeEdi - происходит после/до начала редактирования приложением текущей записи.
  • AfterInsert и BeforeInsert - происходит после/до того как приложение вставит новую запись.
  • AfterOpen и BeforeOpen - происходит после/до того как приложение откроет набор данных, но до того, как какие-либо доступные данные будут отображены.
  • AfterPost и BeforePost - происходит до завершения переноса значений активной записи в базу данных или внутренний кэш.
  • AfterRefresh и BeforeRefresh - происходит после/до обновления набора данных.
  • AfterScroll и BeforeScroll - происходит после/до перемещения позиции курсора на другую запись.
  • OnCalcFields - происходит при открытии набора данных, перевода его в состояние dsEdit, перемещении фокуса ввода от одного компонента к другому или от одного столбца к другому, при изменениях записи или при извлечении записи из базы данных, но только в том случае, если значение свойства AutoCalcFields равно True ;
  • OnDeleteError - инициируется, если при попытке удаления строки произошла ошибка - было брошено исключение.
  • OnEditError - инициируется, если при попытке изменения или вставки записи произошла ошибка - было брошено исключение.
  • OnPostError - инициируется, если при попытке передать изменение или вставку новой записи происходит ошибка - бросается исключение.
  • OnFilterRecord - происходит при изменении активной записи и только в том случае, если свойство State набора данных установлено равным dsFilter, а свойство Filtered равно True. Чтобы запись была включена в набор данных, для нее следует установить параметр Accept равным True.
  • OnNewRecord - происходит при вставке или добавлении новой записи.

Применение многозвенных архитектур

Применение многозвенной архитектуры позволяет вынести бизнес-логику работы с данными в приложение-сервер.

При многозвенной архитектуре приложение разбивается на ряд компонентов, которые могут выполняться на различных компьютерах.

Применение трехзвенной архитектуры приведено на следующей схеме.

приложение-клиент \leftrightarrow

приложение-сервер

Приложение Remote Data Module

Компонент TDCOMConnection \to (свойство ServerName или ServerGUID)
\uparrow (свойство RemoteServer)
Компонент TClientDataSet \to (свойство ProviderName) Удаленный модуль данных - компонент TDataSetProvider
\uparrow (свойство Dataset) \downarrow (свойство DataSet)
Компонент TDataSource Набор данных - компонент TTable или Tquery \leftrightarrow

Такая архитектура позволяет реализовывать доступ к серверу БД из приложения-сервера, не имея на клиентских машинах никаких драйверов доступа к базе данных.

Большое преимущество использования такой архитектуры заключается также в возможности изменения серверной части без необходимости перетрансляции клиентского приложения.

Приложение-сервер получает набор данных стандартным способом - через один из компонентов набора данных, таких как TTable или Tquery, и пересылает его с помощью компонента TDataSetProvider компоненту TClientDataSet в приложение-клиент. Приложение-сервер реализуется как удаленный модуль данных, представляющий из себя СОМ-объект. Доступ к такому компоненту может быть выполнен посредством DCOM с любого удаленного компьютера.

Ирина Шелтер
Ирина Шелтер
Россия, Нижний Новгород, НГПУ им. К.Минина, 2011
Михаил Бородай
Михаил Бородай
Россия, г. Москва