Версия для печати


Создание простейшего клиент-серверного приложения в Делфи
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=773

Aleksandr Shevchuk
дата публикации 28-03-2003 16:15

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

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
Свойство Значение
RemoteServerSocetConnection
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
Свойство Значение
DataSetcdsFirst и cdsSecond соответственно


DBGrid
Свойство Значение
DataSourcedsFirst и dsSecond соответственно

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

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

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

Александр Шевчук
ICQ: 52246883
Специально для Королевства Delphi



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