Aleksandr Shevchuk дата публикации 28-03-2003 16:15 Создание простейшего клиент-серверного приложения в Делфи
Раз приложение простейшее, то я решил использовать БД 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.1. Приложение сервер.
Созданим новое приложение и сохраним его под именем Server в папке C:\ClientServer\Server. Добавим в приложение Remote Data Module с вкладки Multitier репозитария (Рис. 1).
Рис. 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
Все. Закрываем Делфи (для чистоты эксперимента). И запускаем приложение клиент. Если вы все сделали правильно то вы должны увидеть нечто подобное этому
Если статья получит отзывы и заслужит интерес у читателей, то продолжение не заставит себя долго ждать.
Александр Шевчук
ICQ: 52246883
Специально для Королевства Delphi
К материалу прилагаются файлы:
[Технология MIDAS]
Обсуждение материала [ 26-11-2013 08:30 ] 32 сообщения |