45803 (MIDAS. Практическое применение), страница 5

2016-07-31СтудИзба

Описание файла

Документ из архива "MIDAS. Практическое применение", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45803"

Текст 5 страницы из документа "45803"

Для показа значения поля "Поставщик" удобно воспользоваться процедурой из модуля DMCommon:

procedure TDMDoc.SetSenderName(Value: integer);

begin

with cdsTitle do

begin

if not (State in [dsEdit, dsInsert]) then

Edit;

if Value <> 0 then

FieldByName('FROM_ID').AsInteger := Value

else

FieldByName('FROM_ID').Clear;

FieldByName('FromName').AsString :=

DMCommon.ClientName[FieldByName('FROM_ID').AsInteger];

//и оставляем в режиме редактирования

end;

end;

Поле, содержащее имя поставщика (FromName), также вычисляемое (InternalCalc). В поле FROM_ID содержится ID поставщика, а в поле FromName – его полное наименование. Аналогичная процедура заполняет поля для Получателя.

После редактирования документа изменения должны отсылаться на сервер для сохранения в базе данных:

function TDMDoc.ApplyDoc: boolean;

var

AServer: IrdmDocDisp;

ErrorLog: string;

begin

with cdsTitle do

begin

if State in [dsEdit, dsInsert] then

Post;

if ChangeCount > 0 then

ApplyUpdates(0);

end;

with cdsBody do

begin

if State in [dsEdit, dsInsert] then

Post;

if ChangeCount > 0 then

ApplyUpdates(-1);

end;

AServer := IrdmDocDisp(scDoc.GetServer);

ErrorLog := AServer.ApplyChanges;

if ErrorLog <> '' then

begin

MessageDlg('Произошли следующие ошибки:'#13#10 + ErrorLog,

mtError, [mbOK], 0);

//обновляем

cdsBody.Active := False;

cdsTitle.Active := False;

cdsTitle.Active := True;

cdsBody.Active := True;

end;

Result := ErrorLog = '';

end;

Сначала все сделанные изменения отсылаются на сервер вызовом методов клиентских наборов данных ApplyUpdates. Затем вызывается метод сервера ApplyChanges, который сохраняет изменения в БД. При наличии ошибок их список помещается в переменную ErrorLog и отображается пользователю.

Отчет

Необходимо получить от сервера содержимое отчета и присвоить результат запроса свойству TClientDataSet.Data с пустым набором полей. Автоматически будет создан список полей с необходимыми заголовками:

procedure TDMReport.RefreshInOut(FromDate, ToDate: TDateTime);

begin

scReport.Connected := True;

with cdsInOutRes do

begin

Active := False;

Data := FServer.InOutData(int(FromDate), int(ToDate));

Active := True;

end;

end;

Здесь scReport – компонент TSocketConnection, настроенный на соединение с удаленным модулем rdmReport, а компонент cdsInOutRes предназначен для получения результата. Поля этого набора данных создаются динамически на основе полученного от сервера пакета.

Переменная FServer получает свое значение в событии OnAfterConnect компонента scReport:

procedure TDMReport.scReportAfterConnect(Sender: TObject);

begin

FServer := IrdmReportDisp(scReport.GetServer)

end;

В результате на клиенте получается ClientDataSet, полностью заполненный данными отчета, которые можно показать в DBGrid. Примерный результат можно увидеть на рисунке 5.

Рисунок 5. Внешний вид отчета.

Заключение

Технологию MIDAS стоит применять в средних и больших приложениях, база данных которых насчитывает десятки и сотни таблиц. Именно в этом случае применение MIDAS дает значительные преимущества в разработке и сопровождении приложения. Какие же преимущества дает использование MIDAS:

Разумеется, возникает дополнительное структурирование приложения. Сервер приложений работает с базой данных. На нем лежит ответственность за сохранение целостности данных и за синхронизацию работы пользователей. На клиентской части остаются средства представления данных пользователю и контроль ввода данных.

При разработке приложения можно сначала создать модули сервера приложений, провести тесты на работоспособность, и только потом написать клиентскую часть.

Независимость от конкретной СУБД. Действительно, на рабочих станциях не нужно устанавливать клиентскую часть сервера баз данных, соединение с сервером приложений обеспечивается одной библиотекой midas.dll. При переходе на другой сервер БД достаточно переписать только сервер приложений, не затрагивая клиентскую часть. Может оказаться полезным добавление еще одного слоя абстракции данных между сервером приложений и сервером БД, обеспечивающего просто доступ к элементам базы. В этом случае при переходе на другой сервер БД нужно переписать только отдельные модули, не затрагивая сервер приложений в целом. Необходимо также учитывать, что при групповой разработке приложений обычно часть программистов специализируется на базе данных, другая часть – на интерфейсе пользователя. При этом каждая группа программистов может работать над своей частью приложения, не отвлекаясь на особенности работы другой группы.

Значительно упрощается синхронизация работы пользователей, которую теперь обеспечивает сервер приложений.

Это то, что касается разработки приложения. Сервер приложений можно оформить в виде DLL. Это позволит использовать его как удаленно (через COM+, MTS или собственный суррогатный процесс), так и в виде внутрипроцессного сервера. Последний вариант позволяет создать версию приложения, не нуждающуюся в установке и конфигурации сервера приложений.

При эксплуатации также проявляются некоторые преимущества:

Уменьшается поток данных между клиентским приложением и серверной частью. Дело в том, что иногда приходится при расчетах обращаться к дополнительным таблицам БД. В случае трехуровнего приложения эти таблицы можно обрабатывать на сервере приложений, который часто установлен на одном компьютере с сервером БД или связан с ним каналом большой пропускной способности. Также необходимо учитывать, что, как правило, помимо непосредственно данных, сервер БД и использующее его приложение обмениваются значительным количеством служебной информации, например, о типах полей таблиц. Выбор отдельной строки результата запроса (курсора) происходит отдельной командой (fetch), что увеличивает сетевой обмен. В пакеты MIDAS включаются только необходимые данные, передаваемые единым массивом, что заметно уменьшает нагрузку на сеть.

Поскольку основная обработка данных происходит на сервере приложений, который обычно устанавливается на наиболее мощном компьютере, клиентская часть требует значительно меньше ресурсов на рабочих станциях.

Повышается защищенность приложения, поскольку на рабочих станциях отсутствует прямой доступ к серверу БД.

Как видно, преимуществ довольно много, и на практике они с запасом окупают необходимость написания «дополнительного» кода.

Теперь мне хотелось бы сказать несколько слов о переходе на более новые версии Delphi. В Delphi 6 технология MIDAS поменяла свое название, и теперь называется DataSnap. По-видимому, в связи с этим произошли некоторые изменения в составе компонентов. В частности, в том, что касается данного проекта, при переводе его на Delphi 6 я столкнулся с необходимостью изменения объявлений некоторых обработчиков событий TClientDataSet и TDataSetProvider. Это связано с тем, что в Delphi 6 появился компонент TCustomClientDataSet, который заменил TClientDataSet. Например, объявление

procedure TrdmDoc.cdsTitleReconcileError(DataSet: TClientDataSet;

E: EReconcileError; UpdateKind: TUpdateKind;

var Action: TReconcileAction);

теперь должно выглядеть так:

procedure TrdmDoc.cdsTitleReconcileError(DataSet: TCustomClientDataSet;

E: EReconcileError; UpdateKind: TUpdateKind;

var Action: TReconcileAction);

Аналогичным образом необходимо заменить остальные объявления.

В остальном проект изменений не потребовал. Думаю, на более новых версиях Delphi никаких изменений также не потребуется, либо они будут незначительными.

Приложения

Разумеется, выше описан не полный текст сервера приложений, а тем более, клиента. В исходных текстах содержатся дополнительные процедуры, предназначенные, в частности, для более полного контроля за ошибками.

При установке сервера приложений рекомендуется просто запустить его, главная форма сервера дает возможность выбрать местоположение базы данных. Диалог для этого использован стандартный, входящий в поставку IBX. При этом необходимо учитывать, что если в пути к базе не указано имя сервера, что подразумевает, что сервер Interbase и база находятся на одном компьютере с сервером приложений, рекомендуется выбирать удаленный доступ (указать путь вида localhost:). Дело в том, что Interbase выполняет все запросы локальных соединений в одном потоке, в результате один клиент будет ждать выполнения запроса другого клиента.

На клиенте в главной форме есть возможность упорядочить список документов по любому полю, просто щелкнув мышкой на заголовке колонки. Обеспечен полный контроль ошибок с выдачей сообщений пользователю.

Некоторые замечания.

Исходные тексты созданы в Delphi 5. Для правильной работы сервера приложений необходимо производить компиляцию с использованием IBX версии 4.52, исходные тексты этой версии можно взять на http://codecentral.borland.com/codecentral/ccweb.exe/author?authorid=102. Перед установкой этого обновления должен быть установлен Delphi5 Update pack 1.

Клиент соединяется с сервером при помощи TSocketConnection, поэтому для работы приложения должен быть запущен Borland Socket Server. Исполнимый файл обычно находится в каталоге ($Delphi)\bin и называется scktsrvr.exe.

Для работы приложения MIDAS используют библиотеку midas.dll, которая при установленном Delphi 5 находится в системном каталоге Windows. Этот модуль необходим как для работы клиента, так и сервера приложений.

Для Delphi 6 необходима установка Update pack 2 и пакета обновления компонент IBX6.xx. Для компиляции проекта я использовал, в частности, IBX 6.04.

Вот вроде и все.

Огромное спасибо Александру Капустину, Павлу Шмакову и другим, кто помогал мне советами и критикой.

Для подготовки данной работы были использованы материалы с сайта http://www.rsdn.ru/

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5184
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее