Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
01.05.2014
Размер:
526.34 Кб
Скачать

Технологии построения информационных систем – приложений БД

Базовая архитектура сервера баз данных

На физическом уровне сервером БД реализуются следующие функции (продолжение):

Журнализация

Одним из основных требований к СУБД является надежное хранение данных во внешней памяти. Под надежностью хранения понимается то, что СУБД должна быть в состоянии восстановить последнее согласованное состояние БД после любого аппаратного или программного сбоя.

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

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

Технологии построения информационных систем – приложений БД

Базовая архитектура сервера баз данных

На физическом уровне сервером БД реализуются следующие функции (продолжение):

Языки БД

Для работы с базами данных используются специальные языки, в целом называемые языками баз данных. В ранних СУБД поддерживалось несколько

специализированных по своим функциям языков. Чаще всего выделялись два языка - язык определения схемы БД (SDL - Sсhema Definition Language) и язык манипулирования данными (DML - Data Manipulation Language).

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

: Проектирование приложений БД

Реализация доступа к базам данных в среде DELPHI

VCL-библиотека классов среды проектирования Delphi предоставляет ряд классов, позволяющих быстро и эффективно разрабатывать различные приложения баз данных. Эти классы представлены следующими группами:

1.компоненты для доступа к данным, реализующие:

доступ через машину баз данных BDE (Borland Database Engine), предоставляющую доступ через ODBC-драйверы или через внутренние драйверы машины баз данных BDE (компоненты страницы BDE-палитры инструментов);

доступ через ADO-объекты (ActiveX Data Objects), в основе которого лежит применение технологии OLE DB (компоненты страницы ADO);

доступ к локальному или удаленному SQL-серверу InterBase (компоненты страницы InterBase);

доступ посредством легковесных драйверов dbExpress;

доступ к БД при многозвенной архитектуре (компоненты страницы DataSnap);

2.визуальные компоненты, реализующие интерфейс пользователя;

3.компоненты для связи источников данных с визуальными компонентами, предоставляющими интерфейс пользователя;

4.компоненты для визуального проектирования отчетов.

: Проектирование приложений БД

Реализация доступа к базам данных в среде DELPHI

Основными механизмами доступа к данным, поддерживаемым в Delphi, являются:

ODBC - доступ через ODBC-драйверы БД или BDE-драйверы;

OLE DB - доступ с использованием провайдеров данных (OLE DB - это метод доступа к любым данным через стандартный COM-интерфейс);

средства dbExpress, использующие легковесные драйверы БД;

Средства IBExpress при непосредственном взаимодействии с InterBase

средства доступа к распределенным наборам данных в многозвенной архитектуре.

: Проектирование приложений БД

Реализация доступа к базам данных в среде DELPHI

Самый простой механизм управления данными, использующий ODBC-драйверы, может быть реализован по следующей схеме:

1.В модуль данных (или в форму) добавляется компонент набора данных (объект класса TDataSet) и устанавливается связь с источником данных, определяемая свойством DatabaseName. Связь может быть указана одним из трех способов: по имени базы данных, каталогу или псевдониму (способ указания связи может быть ограничен типом источника данных). Список всех псевдонимов доступен на этапе проектирования.

2.В модуль данных (или в форму) добавляется компонент источника данных (TDataSourse), являющийся центральным связующим звеном между набором данных и элементами управления, отображающими эти данные. Свойство DataSet компонента типа TDataSourse указывает набор данных, формируемый компонентами таких классов как TTable или TQuery. Если компоненты набора данных и источника данных расположены в модуле данных, то их следует добавить в проект (команда меню File | Use unit).

3.В форму добавляются элементы управления для работы с данными, такие как TDBGrid, TDBEdit, TDBCheckbox. Они связываются с компонентом источником данных, который указывается свойством DataSource. Имя поля набора данных определяется свойством DataField.

: Проектирование приложений БД

Упрощенная схема работы с базами данных для двухзвенных архитектур в среде Delphi

 

 

Сервер БД

 

 

 

Машина БД

 

Провайдеры

dbExpress

 

InterBase

BDE

 

 

 

OLE DB

 

 

(IBExpress)

 

 

 

 

 

 

 

 

 

 

 

 

TDataBase

 

TADOConection

 

 

TSQLConection

 

TIBDataBase

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TTable, TQuery,

 

TADOTable, TADOQuery,

 

 

TSQLTable, TSQLQuery,

 

TIBTable, TIBQuery,

 

 

 

 

TSQLDataSet,

 

 

TDataSet

 

TADODataSet

 

 

 

 

 

TIBDataSet

 

 

 

 

TSQLClientDataSet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Свойство DataSet

Компонент "источник

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TDataSourse

 

 

 

 

 

Невизуальные

 

 

 

 

 

 

 

 

 

 

 

 

 

данных"

 

 

 

 

 

 

Свойство DataSourse

компоненты набора

 

 

 

 

 

 

 

 

 

 

 

 

данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Визуальные

 

 

 

 

TDBGrid, TDBEdit,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TDBText и др.

 

 

 

 

 

компоненты для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

работы с данными

: Проектирование приложений БД

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

Набор данных - это упорядоченная последовательность строк, извлеченных из источника данных.

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

Предком всех классов наборов данных является класс TDataSet. Он определяет основу структуры всех наборов данных - массив компонентов типа TField (каждый элемент массива соответствует столбцу таблицы).

В зависимости от механизма доступа, используемого приложением, базовыми классами набора данных могут быть:

TTable, TQuery, TStoredProc - для однозвенных или двухзвенных приложений, использующих машину баз данных BDE. Класс TQuery дополнительно позволяет выполнять параметрические запросы;

TClientDataSet - для реализации клиентского набора данных и для многозвенной архитектуры, использующей распределенный доступ;

TADODataSet - для приложений, использующих ADO-объекты;

TSQLDataSet ,TSQLTable и TSQLQuery - для доступа к базе данных посредством dbExpress.

TIBDataSet, TIBTable, TIBQuery - для доступа к базе данных посредством IBExpress.

: Проектирование приложений БД

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

Для определения набора данных необходимо задать следующие свойства (здесь и далее, на примере компонентов IBExpress):

для класса TIBTable - значения свойств DatabaseName и TableName;

для класса TIBQuery - значение свойства SQL и, возможно, свойства DatabaseName.

Набор данных предварительно должен быть открыт. Открыть набор данных можно одним из следующих способов:

Query1.Active:= True;

или

Query1.Open;

Аналогично, закрыть набор данных можно вызовом метода Close или установив значение свойства Active равным False.

Для компонента типа TIBQuery метод Open может быть выполнен только для закрытого набора данных: попытка открыть уже открытый набор данных инициирует ошибку.

Открытие набора данных влечет за собой:

инициацию событий BeforeOpen и AfterOpen;

установку состояния набора данных в dsBrowse;

открытие курсора для набора данных;

если в момент открытия набора данных произошла ошибка, то состояние набора данных устанавливается в dsInactive, а курсор закрывается.

Включение кэширования изменений:

По умолчанию при переходе от одной записи набора данных к другой происходит запись всех сделанных изменений в базу данных (для модифицируемых НД).

Чтобы включить режим кэшированного обновления, следует установить значение свойства CachedUpdates равным True для компонента набора данных. Для присвоения кэшированного обновления вызывается метод ApplyUpdates, а для отмены - CancelUpdates.

: Проектирование приложений БД

Классы библиотеки VCL Delphi

Класс TDataSet

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

Active свойство, определяющее, открыт ли набор данных;

DataSource свойство, указывающее родительскую таблицу (для таблиц, связанных отношением родительская - дочерняя);

Bof

свойство, определяющее, находится ли курсор на первой записи набора данных;

 

Eof

свойство, определяющее, достигнут ли конец набора данных;

 

FieldCount свойство, указывающее количество полей в наборе данных;

 

Fields

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

доступа к этим полям.

Found

свойство, определяющее, успешно ли выполнен поиск методами FindFirst, FindLast, FindNext или FindPrior;

Modified

свойство, определяющее, была ли изменена активная запись;

 

RecordCount

свойство, содержащее общее число записей в наборе данных;

 

State

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

dsInactive - набор данных закрыт;

dsBrowse - данные доступны только для просмотра;

dsEdit - можно изменять активную запись;

dsInsert - активной записью является новая запись, пока не сохраненная;

dsSetKey - просмотр ограниченного множества записей (SetRange) или поиск записи;

dsCalcFields - выполняется обработчик события OnCalcFields;

dsFilter - выполняется обработчик события OnFilterRecord;

dsOpening - набор данных находится в процессе открытия.

: Проектирование приложений БД

Классы библиотеки VCL Delphi

Класс TDataSet

Append метод, добавляющий в конец набора данных новую запись;

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

Edit метод, переводящий текущую запись в режим редактирования; Cancel метод, отменяющий изменения, сделанные в текущей записи; Post метод, выполняющий внесение изменений в базу данных;

Refresh метод, выполняющий обновление результирующего набора путем повторного извлечения данных из БД;

Insert метод, вставляющий в набор данных новую запись;

InsertRecord метод, вставляющий в набор данных новую запись со значениями, которые указаны параметрами метода;

Close метод, закрывающий набор данных; Open метод, открывающий набор данных;

First метод, устанавливающий курсор на первую запись набора данных и делающий эту запись активной;

Last метод, устанавливающий курсор на последнюю запись набора данных и делающий эту запись активной;

Next метод, перемещающий курсор на следующую запись набора данных и делающий эту запись активной;

Prior метод, перемещающий курсор на предыдущую запись набора данных и делающий эту запись активной.

 

: Проектирование приложений БД

 

Классы библиотеки VCL Delphi

 

Класс TDataSet

Пример 1.

 

Table1.Edit;

// Включение режима редактирования

Table1.Fields.Fields[6].AsString := Edit1.Text;

Table1.Post; // Присвоение изменений Свойство Fields

Пример 2. var S: String;

begin

 

S := Fields[0].FieldName;

// Имя первого поля

S := Fields[1].FieldName;

// Имя второго поля..

end;

 

Пример 3.

var s: String; i: Integer; d: TDateTime; s := Fields[0].AsString;

i := Fields[0].AsInteger; d := Fields[0].AsDate;

Пример 4.

//Вместо Fields[n] можно использовать функцию FieldsByName('имя_поля’) - метод, определяющий

//поле набора данных по его имени;

s := Fields[0].AsString;

s := FieldsByName('F1').AsString;

Table1.FieldByName('F1').AsInteger:=StrToInt(Edit1.Text);

Соседние файлы в папке Презентации по технологиям БД