Создание простейшего клиент-серверного приложения в Делфи

Источник: delphikingdom
Aleksandr Shevchuk

Автор: © Aleksandr Shevchuk

1. База данных 

Раз приложение простейшее, то я решил использовать БД MS Jet 4.0 (проще говоря БД MS Access). Это решение вызвано тем что Jet (прошу не путать с MS Access) является бесплатным продуктом и поставляется вместе с MS Windows (то бишь для работы нашей программы ненужно устанавливать на компьютер клиента сам Access). Да и редактор БД очень неплохой, и ядро поддерживает кучу типов полей для удовлетворения самых извращенных желаний при хранении данных.

Итак создадим новую БД, назовем ее Test и сохраним ее в папке C:\ClientServer\Server\Data (процесс создания новой БД в Аксесе я, по понятным, причинам опускаю, и приведу только структуру таблиц - входящих в нашу базу).

1. Таблица первая, назовем ее First (ну не литератор я!)

Имя поля   Тип  Описание 
Index_ Счетчик (ключевое) Привык я это делать - кому не нравится могут не создавать!Кстати Аксес сам предложит создать это поле если вы его не создадите - вот такой вот вредный этот майкрософт
Name Текстовый (длина 50)  
Birthday Дата/Время (краткий формат Даты)  
IdCod Числовой  
Address Текстовый (длина 250)
 

2. Таблица вторая, а назовем ее уже по хитрому - Second

Имя поля   Тип  Описание 
Index_ Счетчик (ключевое) см. выше
ClientIndex Числовой(длинное целое) Поле для связи с главной таблицей
Phone Текстовый
 

Ну вот, как бы, с базой и все.

2. Программа  

2.1. Приложение сервер.

Созданим новое приложение и сохраним его под именем Server в папке C:\ClientServer\Server. Добавим в приложение Remote Data Module с вкладки Multitier репозитария (Рис. 1).

Рис. 1 Репозитарий с выделенным Remote Data Module.
Рис. 1 Репозитарий с выделенным Remote Data Module.

При добавлении RDM мастер добавления запросит параметры данного модуля - там введем имя нашего сервера "Test".

Все остальное оставим без изменений. После нажатия кнопки "Ок" в проекте появится форма подобная обычному дата модулю с именем Test. Сохраним ее под именем RDMFrm.pas.

Выложим на нее компоненты ADOConnection (одна штука), ADOTable и DataSetProvider (по две штуки). Компоненты ADOTable и DataSetProvider обзовем - adotFirst, adotSecond, dspFirst и dspSecond соответственно. По двойному клику на компоненте ADOConnection вывалится мастер Connection String. Выбераем пункт "Use Connection String" и нажимаем кнопочку Build. В появившемся окне "Свойства связи с данными" выберем пункт "Microsoft Jet 4.0 OLE DB Provider" и нажмем кнопку "Далее". На владке "Подключение" введем путь к БД, нажмем кнопочку "Проверить подключение" и получим сообщение что проверка подключения выполнена. После чего закроем мастер путем нажатия на кнопке ОК. Еще у компонента ADOConnection свойство есть LoginPrompt, которое установим в False и Connected - True. У компонетов ADOTable свойство Connection установим равным ADOConnection путем выбора из выпадающего списка. Свойство TableName установим в First и Second соответсвенно. Свойство CursorType - ctDynamic, свойство TableDirect - True. Вызвать FieldsEditor и добавить туда все поля.

У компонентов DataSetProvider:

Свойство  Значение 
DataSet adotFirst и adotSecond соответственно
ResolveToDataSet True
UpdateMode upWhereKeyOnly
В опциях поднять флаги 
poAutoREfresh True
poPropogateChanges True
 

Вот на этом процесс создания примитивного MIDAS сервера можно считать завершенным. Чтобы зарегистрировать сервер в подсистеме DCOM нужно запустить приложение с параметром /regserver - Server.exe /regserver.
И последний штрих, это приложение СокетСервер от Борланда, которое находится в папке Delphi?/Bin/scktsvr.exe. Для того чтобы клиент мог видеть сервер нужно запустить scktsvr.exe (если у вас установлена Win NT/w2k/XP то можно это приложение зарегистрировать как службу, для этого его нужно запустить с параметром scktsvr.exe /install)

2.2. Приложение клиент

Создадим новое приложение, и сохраним его в папке C:\ClientServer\Client под именем Client. Разместим на главной форме по два компонента ClientDataSet(обзовем их cdsFirst, cdsSecond), DataSource(обзовем их dsFirst, dsSecond), DBGrid(обзовем их dbgFirst, dbgSecond) один компонент SocetConnection.

SocetConnection

Свойство  Значение 
Host Имя вашего компьютера - в последствии в это свойство нужно будет занести имя компьютера на котором будет рассположено приложение Сервер
ServerName Если вы правильно заполнили свойство Host и запущено приложение СокетСервер то в выпадающем списке должно появится Server.Test - его и нужно выбрать.
 

Если вы все сделали правильно, то при установке свойства Connected в True, должно запустится приложение сервер.

ClientDataSet

Свойство  Значение 
RemoteServer SocetConnection
ProviderName dspFirst и dspSecond соответственно
Active True
Для cdsSecond 
MasterSource dsFirst
MasterFields Index_
IndexFieldNames ClientIndex
 

Запустим Редактор Полей (двойной клик по компоненту) и занесем туда все поля. Для компонентов ClientDataSet напишем обработчик sdsAfterPost

procedure TMainForm.cdsAfterPost(DataSet: TDataSet);
begin
 with (DataSet as TClientDataSet) do begin
  if State in [dsEdit, dsInsert] then
   try
    ApplyUpdates(0);
    Refresh;
   except
    raise EDatabaseError.Create('Ошибочка вышла');
   end;
 end;
end;

И подставим его на обработку события AfterPost обоих ClientDataSet'ов.

DataSource

Свойство  Значение 
DataSet cdsFirst и cdsSecond соответственно
 

DBGrid

Свойство  Значение 
DataSource dsFirst и dsSecond соответственно
 

Запустим Редактор колонок (двойной клик по компоненту) и занесем туда все поля.
Положим на форме возле Гридов по кнопке и в обработчик onClick запишем:

  • для dbgFirst - cdsFirst.Post
  • dbgSecond - cdsSecond.Post

Все. Закрываем Делфи (для чистоты эксперимента). И запускаем приложение клиент. Если вы все сделали правильно то вы должны увидеть нечто подобное этому

 

К материалу прилагаются файлы:


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=16429