Учебный пример: Многозвенная архитектура DataSnap XE для баз данных

By: Vsevolod Leonov

Abstract: В этой статье рассматривается создание простейшего многозвенного приложения для баз данных с использованием DataSnap XE. Этот пошаговый учебный пример очень прост, поэтому даже начинающие программисты Delphi смогут его воспроизвести. Целью этого учебного примера является знакомство с процессом создания клиентов и серверов DataSnap. Наш пример «многозвенное приложение для баз данных» подразумевает клиентское и серверное приложение. Обе программы – Delphi VCL Forms Win32, а для связи используется протокол TCP/IP. Надеемся, вам понравится!

    Введение

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

Для данного примера подойдет любая база данных; однако здесь рассмотрен Embarcadero InterBase XE RDBMS в качестве сервера баз данных. Если у вас не установлен InterBAse XE, можно скачать бесплатную редакцию для разработки (developer edition) по адресу https://downloads.embarcadero.com/free/interbase.

InterBase XE поставляется с демонстрационной базой данных “EMPLOYEE” которая и будет использоваться в дальнейшем.

Сначала нам необходимо сконфигурировать Delphi Data Explorer для связи с этой базой данных “EMPLOYEE”.

    Конфигурирование подключения к базе данных в Data Explorer

В панели Data Explorer кликните правой кнопкой мыши на узле “INTERBASE”, выберите “Add New Connection” и задайте имя “IBEMPLOYEE”.

Hide image

Кликните правой кнопкой на созданном узле “IBEMPLOYEE” в панели Data Explorer и выберите “Modify Connection” для конфигурирования соединения с базой данных.

По-умолчанию InterBase XE устанавливается и размещает демонстрационную базу данных “EMPLOYEE” в папку “c:\Embarcadero\InterBase\examples\database\employee.gdb”. По-умолчанию параметр username установлен в значение “sysdba”, а пароль “masterkey”.

Hide image

Кликните на “Test Connection” для проверки правильности конфигурирования подключения к базе данных.

Hide image

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


    Создание сервера DataSnap Server для многозвенной системы

На данном первом шаге мы создадим новый сервер DataSnap с использованием мастера “DataSnap Server”.

Выберите “File -> New -> Other”, а в диалоге “New Items” кликните два раза на иконке “DataSnap Server” в категории “Delphi Projects -> DataSnap Server”.

Hide image

Hide image
Click to see full-sized image

На первой странице оставьте опцию “Project type” как “VCL Forms Application”.

Hide image
Click to see full-sized image

На второй странице также оставим опции по-умолчанию.

Hide image
Click to see full-sized image

На третьей страниц оставьте значение “211” для номера порта TCP/IP. Желательно всегда проверять доступность порта нажатием на кнопку “Test Port”.

Hide image
Click to see full-sized image

На последней странице выберите “TDSServerModule” в качестве базового для класса серверных методов.

Кликните на кнопке “Finish”, а мастер сгенерирует новый проект, состоящий из трех модулей.

Кликните на “File -> Save All”.

Создайте новую папку для всех файлов данного примера – например, “C:\DataSnapLabs\MultiTier\”.

Сохраните главную форму приложения как “FormServerUnit” и согласитесь с именами по-умолчанию для всех остальных файлов – обычно, “ServerContainerUnit1” и “ServerMethodsUnit1” – и сохраните сам проект как “MultiTierServer”.

Реализация подключения к базе данных в простом сервере DataSnap вообще не требует кодирования! Задача состоит лишь в добавлении нескольких компонентов к ”ServerMethodsUnit1”.

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

Целью следующего шага является добавление компонентов “TSQLConnection”, “TSQLDataSet” и “TDataSetProvider” в разрешенную для размещения область “ServerMethodsUnit1” и их связывание. Самый простой способ сделать это – воспользоваться возможностью взаимодействия Data Explorer и дизайнера VCL Forms. Просто выберите нужную таблицу в Data Explorer и перетащите ее на “ServerMethodsUnit1” для автоматического создания и конфигурирования этих двух компонентов.

Обратите внимание, что компоненты TSQLConnection и TSQLDataSet «переползли» на модуль серверных методов, но они также получили правильные имена и нужные свойства.

Последним шагом является размещение компонента “TDataSetProvider” (закладка Data Access в палитре компонентов) на модуле данных и установка его свойства “DataSet” в значение “CUSTOMER”. Желательно всегда задавать имя провайдеру данных с каким-либо смыслом, например, “dspCustomer”.

Hide image

Мы полностью реализовали наш демонстрационный сервер. Это было легко, и нам не потребовалось вводить ни одной строчки кода!

Для того чтобы создать клиентское приложение, сервер должен быть запущен. Выберем Select “Run -> Run Without Debugging” (запуск без отладчика) для запуска сервера, а затем минимизируем его окно.

Оставим сервер запущенным до окончания выполнения данного учебного примера.

    Создания клиента DataSnap Client для многозвенного решения для БД

Кликните правой кнопкой мыши на проектной группе (project group) и выберите “Add New Project”.

Hide image

В диалоге “New Items” выберите “VCL Forms Application” в категории “Delphi Projects”.

Hide image

Кликните “OK”. К существующей проектной группе добавится новый проект.

Кликните на “File -> Save All”.

Выберите папку, в которой был сохранен серверный проект, и сохраните туда модуль главной формы клиентского приложения как “FormClientUnit”, новый проект как “MultiTierClient” и новую проектную группу как “MultiTierGrp”.

Поместите компонент “TSQLConnection” на клиентской форме и задайте свойство “Driver” в значение “DataSnap”. Снимите «галочку» на свойстве “LoginPrompt”, теперь данное свойство имеет значение “False”.

Поместите компонент “TDSProviderConnection” (раздел DataSnap Client палитры компонентов) на форму и установите его свойство “SQLConnection” из выпадающего списка так, чтобы оно указывало на компонент “SQLConnection1”, который уже находится на форме.

Введите “TServerMethods1” в качестве значения свойства “DSProviderConnection1.ServerClassName”.

Добавьте компонент “TClientDataSet” на форму.

Поставьте значение свойства “RemoteServer” в “DSProviderConnection1”.

В выпадающем списке свойства “ProviderName” выберите “dspCUSTOMER”.

Добавьте на форму компонент “TDataSource” и установите свойство “DataSet” в значение “ClientDataSet1”.

Добавьте компонент “TDBGrid” на форму и установите его свойство “DataSource” в значение “DataSource1”.

Добавьте компонент “TDBNavigator” на форму и установите его свойство “DataSource” в значение “DataSource1”.

Добавьте компонент “TCheckBox” на форму. Измените его свойство “Caption” на “Active”.

Кликните два раза на компоненте “CheckBox1” и введите следующий код для события “OnClick”:

procedure TForm3.CheckBox1Click(Sender: TObject);
begin
  ClientDataSet1.Active := CheckBox1.Checked;
end;

Добавьте компонент “TButton” на форму. Кликните два раза на нем и введите следующий код для события “OnClick”:

procedure TForm3.Button1Click(Sender: TObject);
begin
  ClientDataSet1.ApplyUpdates(-1);
end;

На данной стадии проекта клиентское приложение выглядит так:

Hide image

Теперь настало время увидеть работающего клиента в действии!

Запустите приложение, кликните на компоненте check-box с надписью “Active”. На экране должна отобразиться информация в таблице!

Сделайте некоторые изменения в данных, кликните на кнопке “Post” компонента DBNavigator для фиксации изменений в памяти компонента ClientDataSet1, а затем кликните на кнопке “Apply Updates” для отсылки изменений серверу.

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

Я реорганизовал визуальные компоненты, поэтому мою окончательно клиентское приложение выглядит следующим образом:

Hide image

Так оно выглядит лучше!

Мы только что создали демонстрационное многозвенное решение для базы данных на основе технологии DataSnap при помощи мастеров, небольшого количества компонентов и пары строчек кода!

Это-то и называется «Быстрая разработка приложений» (Rapid Application Development) или сокращенно “RAD”.

    Итог

В этом учебном примере мы использовали Delphi XE и InterBase XE для построения простого многозвенного приложения, состоящего из Win32-сервера и Win32-клиента, которые взаимодействуют между собой на основе протокола TCP/IP.

Весь исходный код примера данной работы размещен на Embarcadero Code Central по адресу http://cc.embarcadero.com/item/28188

Видеоролик, демонстрирующий реализацию этого примера, можно найти здесь http://www.youtube.com/watch?v=B4uxLLIUddg.

Подробное описание возможностей технологии Delphi находится по адресу http://www.embarcadero.com/products/delphi

Server Response from: ETNASC03