Часть полного текста документа:Модель briefcase средствами MIDAS Михаил Голованов В прошлом номере журнала я писал о реализации модели Briefcase с помощью ADO. В отличие от ADO, средства работы с отключенными наборами данных в MIDAS были реализованы с самой первой версии. Реализация модели Briefcase средствами MIDAS несколько проще, хотя и здесь есть свои подводные камни. Приложение MIDAS состоит из двух частей: сервера приложений и тонкого клиента. Сервер приложений "общается" с сервером БД (или другим источником данных), реализует бизнес-правила и предоставляет тонкому клиенту данные по запросу. Функция тонкого клиента - это отображение данных пользователю. В качестве примера мы спроектируем простой сервер приложений и тонкий клиент для работы с базой, описанной в предыдущей части статьи. Сервер приложений реализуем как модуль MTS/COM+. Никаких особенностей создания сервера приложений для модели briefcase нет, поэтому я не буду описывать этот процесс в деталях. В IDE Delphi создадим новый проект приложения для MTS/COM+, выбрав пункт меню File/New/Other, и в появившемся диалоге выберем пункт ActiveX Library с закладки ActiveX. Затем включим в проект новый удаленный модуль данных (File/New/Other и пункт Transactional Datamodule с закладки Multitier). В удаленном модуле данных разместим следующие компоненты и установим значения их свойств согласно таблице 1, приведенной ниже. Компонент Свойство Значение Conn:TADOConnection ConnectionString Настроить на соединение с БД adsParams:TADODataSet Connection Conn CommandText CommandText select * from Params dspParams:TDataSetProvider DataSet adsParams Таблица 1 Откомпилируйте проект сервера и установите полученную dll в новое MTS/COM+-приложение c именем MIDAS_briefcase, с помощью пункта меню Run/Install COM+ Object. Тонкий клиент представляет собой DeskTop-приложение. Для связи с сервером приложений клиент использует один из компонентов типа Connection с закладки DataSnap (мы воспользуемся DCOMConnection) и специальный DataSet - ClientDataSet. В таблице 2 приведены свойства, влияющие на работу компонентов тонкого клиента с сервером приложений, а также их значения. Компонент Свойство Значение DCOMConn:TDCOMConnection ServerName Project1.MIDAS_bc LoginPrompt false cdsParams:TClientDataSet RemoteServer DcomConn ProviderName dspParams Таблица 2 Внешний вид формы приложения тонкого клиента приведен на рисунке 1. Рисунок 1 Получение данных с центрального сервера Получение данных с сервера приложений аналогично приведенному в примере для ADO. Код приведен ниже. procedure TForm1.act_RemoteConnectExecute(Sender: TObject); begin try with cdsParams do try Close; RemoteServer:=DCOMConn; FileName:=''; Active:=true; except on E:Exception do MessageDlg(Format('Ошибка подключения к серверу: %s', [E.Message]), mtError, [mbOk], 0); end; finally DCOMConn.Close; end; Все просто, но для подключения к серверу надо не забывать сбрасывать имя файла кэша (свойство FileName) и закрывать соединение с сервером после получения данных. Чтение и запись данных из локального кэша Для чтения данных из локального кэша у ClientDataSet есть метод LoadFromFile: procedure TForm1.act_ConnectLocalExecute(Sender: TObject); begin with cdsParams do begin RemoteServer:=nil; FileName:=ExtractFilePath(Application.ExeName) + LocalFile; LoadFromFile(FileName); end; end; Для записи в локальный кэш - метод SaveToFile: with cdsParams do SaveToFile(ExtractFilePath(Application.ExeName) + LocalFile); Опять же никаких сюрпризов. Сохранение данных на сервер, отмена сделанных изменений Для сохранения данных на сервер предназначен метод CilentDataSet-а ApplyUpdates. ............ |