Реферат: Модель briefcase средствами MIDAS

Реферат: Модель 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, приведенной ниже.
Откомпилируйте проект сервера и установите полученную dll в новое MTS/COM+-приложение c именем MIDAS_briefcase, с помощью пункта меню Run/Install COM+ Object.
Тонкий клиент представляет собой DeskTop-приложение. Для связи с сервером приложений клиент использует один из компонентов типа Connection с закладки DataSnap (мы воспользуемся DCOMConnection) и специальный DataSet – ClientDataSet.
В таблице 2 приведены свойства, влияющие на работу компонентов тонкого клиента с сервером приложений, а также их значения.
Внешний вид формы приложения тонкого клиента приведен на рисунке 1.
Получение данных с центрального сервера

Получение данных с сервера приложений аналогично приведенному в примере для ADO. Код приведен ниже.
procedure TForm1.act_RemoteConnectExecute(Sender: TObject);
MessageDlg(Format('Ошибкаподключенияксерверу: %s', [E.Message]),
Все просто, но для подключения к серверу надо не забывать сбрасывать имя файла кэша (свойство FileName) и закрывать соединение с сервером после получения данных.
Чтение и запись данных из локального кэша

Для чтения данных из локального кэша у ClientDataSet есть метод LoadFromFile:
procedure TForm1.act_ConnectLocalExecute(Sender: TObject);
FileName:=ExtractFilePath(Application.ExeName) + LocalFile;
Для записи в локальный кэш – метод SaveToFile:
SaveToFile(ExtractFilePath(Application.ExeName) + LocalFile);
Сохранение данных на сервер, отмена сделанных изменений

Для сохранения данных на сервер предназначен метод CilentDataSet-а ApplyUpdates. Параметр данного метода указывает макисимально допустимое количество ошибок при передаче данных на сервер.
procedure TForm1.act_SaveToServerExecute(Sender: TObject);
if cdsParams.Active and (cdsParams.ApplyUpdates(0) = 0) then
При возникновении ошибки генерируется событие OnReconcileError. Обработка ошибки осуществляется с помощью стандартного модуля обработчика ошибки, подключить этот модуль в проект можно, выбрав ReconcileErrorDialog на закладке Dialogs (File/New/Other). Обработчик OnReconcileError будет выглядеть при этом следующим образом:
procedure TForm1.cdsParamsReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind;
Action:=HandleReconcileError(DataSet, UpdateKind, E);
Для отмены внесенных изменений ClientDataSet содержит метод CancelUpdates.
Обмен данных между тонким клиентом и сервером приложений происходит пакетами. Пакет содержит информацию о метаданных и/или набор записей. Интересной возможностью MIDAS является передача данных «порциями». Естественно, данная возможность реализуется лишь во время наличия соединения с центральным сервером. Включение данной возможности осуществляется установкой свойства FetchOnDemand ClientDataset-а в true. К сожалению, даже при этом запрос к серверу базы данных выбирает все записи сразу. Об одном из способов устранения этого недочета я и хочу рассказать.
Первое, что необходимо сделать, это изменить текст SQL-запроса, находящегося в свойстве CommandText компонента adsParams (напомню, что это ADODataSet), на следующий:
При этом записи будут выбираться порциями по 2. Естественно, что в реальных приложениях размер пакета будет больше этого числа. Конкретное число представляет собой компромисс между затратами времени на передачу пакета по сети (чем больше размер пакета, тем выше задержки при его передаче) и задержками, возникающими от частого обращения с запросами к серверу БД. (на практике размер такого пакета зависит от размера записи, но в среднем составляет от 30 до 250 строк. – прим.ред.)
Остается решить проблему, как клиент будет передавать серверу идентификатор последней считанной записи (ParamID). Проблема эта возникает потому, что сервер приложений не сохраняет состояние между вызовами клиентов. С одной стороны, это делает сервер приложений более масштабируемым, но с другой, требует дополнительного кода на стороне клиента для хранения состояния.
Для передачи значения первичного ключа последней прочитанной клиентом записи можно использовать событие BeforeGetRecords. Данное событие определено для набора данных ClientDataSet на клиенте и компонента провайдера на сервере. Перед получением пакета с записями это событие сначала генерируется на клиенте, а затем у провайдера на сервере приложений. Событие имеет параметр, передаваемый по ссылке OwnerData (типа OleVariant). Вот через этот параметр мы и будем передавать значение ключа последней записи. Код обработчика в клиентском приложении:
procedure TForm1.cdsParamsBeforeGetRecords(Sender: TObject;
if not cdsParams.FieldByName('ParamID').IsNull then
OwnerData:=cdsParams.FieldByName('ParamID').Value;
Соответственно для провайдера на сервере приложений:
procedure TMIDAS_bc.dspParamsBeforeGetRecords(Sender: TObject;
if not VarIsNull(OwnerData) and not VarIsClear(OwnerData) then
adsParams.Parameters.ParamValues['ID']:=OwnerData;
Чтобы инициировать подкачку, необходимо обрабатывать еще одно событие объекта ClientDataSet – OnScroll:
procedure TForm1.cdsParamsAfterScroll(DataSet: TDataSet);
Вызов cdsParams.GetNextPacket; как раз и инициирует получение следующего пакета данных.
Как выяснилось, код метода GetNextPacket содержит ошибку, выражающуюся в отказе чтения следующего пакета после нескольких попыток чтения первого пакета. Связано это с неправильным значением переменной ProviderEOF в описанной выше ситуации.
function TCustomClientDataSet.GetNextPacket: Integer;
if ProviderEOF then Result := 0 else
if (FPacketRecords = 0) and FMasterLink.Active and
(FMasterLink.Fields.Count > 0) then CheckDetailRecords else
AddDataPacket(DoGetRecords(FPacketRecords, Result, 0, '', Unassigned),
ProviderEOF := Result <> FPacketRecords;
Исправлено это было явным присвоением ProviderEOF значения false перед выполнением проверки if ProviderEOF then Result := 0 else …...
Вышеописанный метод организации подкачки имеет, к сожалению, один большой недостаток – он будет работать лишь при сортировке набора данных на клиенте по первичному ключу. Однако не так сложно доработать его для обхода и этой проблемы.

Название: Модель briefcase средствами MIDAS
Раздел: Рефераты по информатике
Тип: реферат
Добавлен 17:58:50 03 апреля 2011 Похожие работы
Просмотров: 6
Комментариев: 18
Оценило: 3 человек
Средний балл: 5
Оценка: неизвестно   Скачать

select Top 2 * from Params where ParamID > :ID
Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Если Вам нужна помощь с учебными работами, ну или будет нужна в будущем (курсовая, дипломная, отчет по практике, контрольная, РГР, решение задач, онлайн-помощь на экзамене или "любая другая" учебная работа...) - обращайтесь: https://clck.ru/P8YFs - (просто скопируйте этот адрес и вставьте в браузер) Сделаем все качественно и в самые короткие сроки + бесплатные доработки до самой сдачи/защиты! Предоставим все необходимые гарантии.
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Реферат: Модель briefcase средствами MIDAS
Реферат по теме Мышление животных. Некоторые способности мышления врановых
Реферат: Значение двигательной активности в жизни студента
Химия 7 Класс Итоговая Контрольная Работа
Курсовая работа по теме Роль автоматизации в процессе производства нефтяного кокса
История Болезни На Тему Полип Анального Отдела Прямой Кишки
Реферат На Тему Смешанные Единоборства
Реферат На Тему Принципы Уголовного Процесса
Автоматизация Лабораторных Работ
Реферат по теме Нормування праці на підприємсті
Реферат Про Реку Ай
Эссе Дистанционное Обучение Благо Или Нет
Реферат: Круговорот веществ в биосфере 2
Курсовая работа: Интерфейс системы программирования Паскаль. Скачать бесплатно и без регистрации
Реферат по теме Венгрия в эпоху Просвещения
7 Класс Контрольная Работа По Культуре
Контрольная работа по теме Ценовая политика предприятия
Курсовая работа: Исполнительная власть в РФ
Реферат: Problematic Solutions Essay Research Paper Problematic SolutionsWith
Сочинение 9 Класс На Тему Балетная Студия
Задание Написать Эссе
Реферат: Конституционно-правовой статус человека и гражданина
Реферат: Віги і торі в політиці Британії
Реферат: Облік внутрішнього відпуску товарів на торговельних підприємствах

Report Page