Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Этап 7. Тестирование и усовершенствование

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

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

 

42. Особенности использования модуля данных.

 

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

Для создания модуля данных можно воспользоваться Репозиторием объектов. Значок модуля данных Data Module расположен на странице New.

На самом деле, модуль данных имеет мало общего со стандартной формой хотя бы потому, что класс TDataModule происходит непосредственно от класса TComponent. У него почти полностью отсутствуют свойства и методы-обработчики событий, но так как его основное назначение — хранение других невизуальных компонентов, то этого минимума свойств вполне достаточно.

Интерфейс модуля данных состоит из двух частей.

Слева располагается иерархическое дерево, содержащее информацию о компонентах модуля данных. Компоненты, инкапсулирующие набор данных, содержат дополнительные данные. Для компонента TTable это:

Дерево компонентов удобно использовать для обращения к компонентам и полям.

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

Страница Components предназначена для размещения не визуальных компонентов доступа к данным (рис. 15.2).

Рис. 15.2. Иерархическое дерево компонентов и страница компонентов модуля данных

Страница Data Diagram используется для создания структуры (модели, диаграммы) данных, с которой работает приложение (рис. 15.3). Любой элемент из иерархического дерева компонентов можно перенести на страницу модели данных и задать связи между ними.

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

Для того чтобы можно было обращаться из других модулей к компонентам доступа к данным, хранящимся в модуле данных проекта, необходимо включить имя файла модуля данных в секцию uses:

unit InterfaceModule;

implementation

uses DataModule;

DataModule. Tablel. Open;

Рис. 15.3. Иерархическое дерево компонентов и страница компонентов модуля данных

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

 

43. Набор данных.

 

Компонент доступа к данным является основой приложения баз данных. На основе выбранной таблицы БД он создает набор данных и позволяет эффективно управлять им. В процессе работы такой компонент тесно взаимодействует с BDE. Все компоненты доступа к данным являются не визуальными.

Обычно приложение баз данных для организации взаимодействия с пользователем использует обычные формы. Поэтому в качестве основы проекта такого приложения подойдет проект обычного приложения.

Для создания нового проекта достаточно выбрать команду New Application из меню File или воспользоваться Репозиторием объектов, который открывается командой New из меню File.

Затем на форму нового проекта необходимо перенести компонент отображения данных (например, TTable) и выполнить следующие действия.

  1. Подключить к компоненту базу данных. Для этого используется свойство DatabaseName, доступное в Инспекторе объектов. В нем необходимо указать зарегистрированный в BDE псевдоним базы данных или полный путь к файлам БД. Псевдоним можно выбрать из списка этого свойства в Инспекторе объектов.
  2. Подключить к компоненту таблицу БД. Для этого используется свойство TableName, доступное в Инспекторе объектов. После выполнения действий первого этапа в списке этого свойства должны появиться имена всех доступных в подключенной базе данных таблиц. Содержимое списка может изменяться в зависимости от значения свойства TableType, которое определяет тип доступных таблиц. При значении ttDefault для локальных СУБД в списке приводятся имена файлов всех таблиц вместе с расширением. Для серверов БД всегда доступны только имена. Другие значения свойства TableType определяют типы локальных СУБД: (ttAscii, ttDBase, ttparadox, ttFoxpro). После выбора имени таблицы в свойстве TableName компонент оказывается связанным с ней.
  3. Переименовать компонент. Это не обязательное действие. Тем не менее, в любом случае желательно присваивать компонентам доступа к данным осмысленные имена, соответствующие названиям подключенных таблиц. Обычно название компонента полностью копирует название таблицы или комбинирует его со словом Table (например, orders или OrdTable).
  4. Активизировать связь между компонентом и таблицей БД. Для этого используется свойство Active. Если в инспекторе объектов присвоить этому свойству значение True, то связь активизируется. Эту операцию можно выполнить и в исходном коде приложения. Метод open открывает набор данных, а метод close закрывает его.

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

На форму нового проекта необходимо перенести компонент TTable со страницы Data Access палитры компонентов. Свойство DatabaseName должно

ссылаться на псевдоним DBDEMOS. Свойство TableName имеет значение 'country.db'. Двойной щелчок на свойстве Active в Инспекторе объектов присваивает ему значение True. После этого связь компонента с таблицей активизируется. Свойство Name имеет значение 'countryTabie'.

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

 

Листинг 15.1 Секция Implemention главного модуля проекта DemoDBApp implementation

{$R *.DFM}

procedure TFormI.FormShow(Sender: TObject);

begin try CountryTable.Open;

except ShowMessage('Ошибка открытия таблицы');

end;

end;

procedure TForml.FormClose(Sender: TObject; var Action: TCloseAction);

begin

try

finally CountryTable.Close;

end;

end;

end.

При открытии формы выполняется метод обработчик FormShow. В нем набор данных открывается при помощи метода open. Обратите внимание на использование конструкции try...except, которая обеспечивает корректное завершение при возникновении исключительных ситуаций.

Так как ошибки в работе приложений баз данных могут привести к серьезным последствиям (потеря или искажение данных), то защитный код должен присутствовать во всех возможных местах.

В методе-обработчике FormClose, который вызывается при закрытии формы, набор данных закрывается методом close. Метод помещен в блок try... finally, так как должен быть выполнен в любом случае.

В принципе, для выполнения рассмотренных операций можно воспользоваться и свойством Active. Однако реальные операции выполняют указанные методы. Поэтому использование свойства является лишним этапом, да и с точки зрения ООП все действия должны выполнять методы объекта, а свойства служат только для представления значений. Свойство Active сигнализирует о состоянии набора данных.

Настройка компонента TDataSource

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

Для настройки свойств компонента необходимо выполнить следующие действия.

  1. Связать набор данных и компонент TDataSource. Для этого используется свойство DataSet, доступное через Инспектор объектов. Это указатель на экземпляр компонента доступа к данным. В списке этого свойства в Инспекторе объектов перечислены все доступные компоненты наборов данных.
  2. Переименовать компонент. Это не обязательное действие. Тем не менее. желательно присваивать компонентам осмысленные имена, соответствующие названиям связанных наборов данных. Обычно название компонента комбинирует имя набора данных со словом source (например, ordsource).

Компонент TDataSource имеет ряд свойств и методов, описание которых представлено в табл. 15.1.

Таблица 15.1. Свойства и методы компонента TDataSource

Объявление Тип Описание
Свойства
property AutoEdit: Boolean; Pb При значении True набор данных автоматически вызывает свой метод Edit при потере фокуса компонентом отображения данных
property DataSet: TdataSet; Pb Указатель на связанный с компонентом набор данных
property Enabled: Boolean; Pb При значении True связанные с компонентом элементы управления отображают данные. При значении False данные не отображаются
type TdataSetState =-(dslnactive, dsBrowse, dsEdit, dslnsert, dsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc); property State: TdataSetState; Ro Отображает состояние набора данных, связанного с компонентом (гл. 16)
Методы
procedure Edit; Pu Осуществляет контроль состояния набора данных перед внесением изменений
function isLinkedTo (DataSet: TdataSet) Boolean; Pu Проверяет, связан ли компонент доступа к: данным, указанный в параметре DataSet, с данным компонентом
Методы-обработчики событий
type TdataChangeEvent = procedure (Sender: Tobject; Field: Tfield) of object; Рb Вызывается при перемещении по набору данных при условии, что данные в текущей записи были изменены
property OnDataChange: TdataChangeEvent;    
property OnStateChange: TnotifyEvent; Pb Вызывается при изменении состояния набоpa данных(гл. 16)
property OnUpdateData: TnotifyEvent; Pb Вызывается перед сохранением изменений в базе данных

В приложении DemoDBApp компонент countrysource связан с компонентом CountryTable. Для этого свойство DataSet имеет значение CountryTable.

Компонент TDataSource можно подключить не только к набору данных из той же формы, но и любой другой, модуль которой указан в секции uses.

 

44. Визуализация данных в Delphi.

 

На третьем этапе создания приложения баз данных необходимо разработать пользовательский интерфейс на основе компонентов отображения данных.

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

Компоненты отображения данных должны быть связаны с компонентом TDataSource и через него с компонентом набора данных. Для этого используется свойство DataSource. Оно присутствует во всех компонентах отображения данных.

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

Особое значение для приложений баз данных играет компонент TDBGrid, который представляет данные в виде таблицы. В столбцах таблицы размещаются поля набора данных, а в строках — записи. Для этого компонента не имеет смысла определять конкретное поле.

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

  1. Связать компонент отображения данных ч компонент TDataSource. Для этого используется свойство DataSource, которое должно указывать на экземпляр требуемого компонента TDataSource. Один компонент ото- ] бражения данных можно связать только с одним компонентом TDataSource. Необходимый компонент можно выбрать в списке свойства в Инспекторе объектов.
  2. Задать поле данных. Для этого используется свойство DataField типа TFields. В нем необходимо указать имя поля связанного набора данных. После задания свойства DataSource поле можно выбрать из списка. Этот этап применяется только для компонентов, отображающих единственное поле.

Отдельное место среди компонентов отображения данных занимает компонент TDBNavigator. Он предназначен для перемещения по записям набора данных. Обычно он используется в паре с компонентом TDBGrid.

В Приложении DemoDBApp использованы компаненты TDBGrid, TDBNavigator И TDBEdit (рис. 15.4).

Все три компонента отображения данных связаны с компонентом CapitalSource типа TDataSource при помощи свойства DataSource.

  1. Компонент TDBEdit отображает данные из поля capital (столица государства) и позволяет редактировать их.
  2. Компонент TDBGrid показывает набор данных целиком, данные в ячейках можно редактировать.
  3. Компонент TDBNaviqator позволяет перемещаться по записям набора данных capitaiTabie. При этом результат заметен во всех подключенных к набору данных компонентах отображения данных.

Рис. 15.4. Главная форма приложения DemoDBApp

 

45. Многоуровневые приложения.

 

В последнее время многоуровневая (multitier) архитектура пользуется все большей популярностью, поскольку имеет массу преимуществ перед файл-серверными или клиент-серверными приложениями. Такая архитектура в различных публикациях также называется многозвенной, или распределенной архитектурой. Суть многоуровневой архитектуры в том, что помимо сервера БД и приложений-клиентов дополнительно присутствует еще один или несколько серверов приложений. Сервер приложений является промежуточным уровнем, обеспечивающим организацию взаимодействия клиентов и сервера БД. Сервер приложений также называют брокером данных (broker - посредник). Чаще всего используют трехуровневую модель. Прежде, чем мы двинемся дальше, давайте разберемся, что же такое уровень. Имеется три основных уровня:

Взгляните на рисунок:


Рис. 28.1. Трехуровневая модель

На рисунке представлены три уровня архитектуры: так называемый, "тонкий" клиент (thin-client), сервер приложений и сервер данных. На ПК сервера БД вместе с данными расположен один из SQL -серверов. Как видите, на клиентском ПК, помимо компонентов доступа к данным, располагается только компонент связи с сервером приложений, а довольно громоздкие механизмы доступа к данным отсутствуют. Из-за этого клиентское приложение и называется "тонким" клиентом. Такой подход не только облегчает распространение приложений, но и позволяет в качестве клиентских ПК использовать дешевые, неприхотливые компьютеры. На сервере приложений вы можете видеть область, обозначенную как " Интерфейс IAppServer ". Этот интерфейс обеспечивается специальным удаленным модулем данных, о котором дальше мы поговорим подробней. Интерфейс IAppServer используют компоненты-провайдеры TDataSetProvider на стороне сервера приложений, и компоненты TClientDataSet на стороне клиента.

При небольшом количестве клиентов ничто не мешает нам отказаться от использования SQL -сервера, расположив данные на самом сервере приложений, и используя к ним обычный локальный доступ через механизм BDE, ADO и т.п. При этом можно использовать обычные таблицы Paradox или MS Access, например. Такой подход удобней, чем файл-серверная архитектура, поскольку позволяет не только "облегчить" пользовательское приложение, но и обеспечивает безопасность данных. Ведь пользователи не будут иметь прямого доступа к самим данным, обмен информацией будет происходить через посредника, как на рисунке ниже:


Рис. 28.2.. Объединение уровня данных и бизнес-уровня на одном сервере

Несмотря на кажущуюся сложность архитектуры, организовать такую модель достаточно просто. Delphi для этого предлагает технологию DataSnap (в старых версиях Delphi эта технология называлась MIDAS - Multi-tier Distributed Applications Services - Серверы многозвенных распределенных приложений). Благодаря этой технологии, вы сможете создать простой сервер приложений буквально за минуту, не введя ни строчки кода.




Дата добавления: 2015-09-12; просмотров: 13 | Поможем написать вашу работу | Нарушение авторских прав

Команды манипулирования данными | Использование подзапросов в INSERT | Клиенты и серверы локальных сетей | Требования к аппаратным возможностям и базовому программному обеспечению клиентов и серверов | Создание таблицы | Удаление таблиц | Оператор вызова процедуры | Оператор обработки ошибок WHEN | Команды создания, удаления и модифиации триггеров | Примечание |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.014 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав