Раз приложение простейшее, то я решил использовать БД 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
Все. Закрываем Делфи (для чистоты эксперимента). И запускаем приложение клиент. Если вы все сделали правильно то вы должны увидеть нечто подобное этому
Если статья получит отзывы и заслужит интерес у читателей, то продолжение не заставит себя долго ждать.
Ссылки по теме