WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Разработка приложений баз данных в среде Delphi. Часть II.

Учебно-методическое пособие по специальности «Прикладная математика и информатика » (010200) Воронеж 2003 2 Утверждено научно-методическим советом протокол № 6 от 26.05.03 факультета ПММ.

Составители: Рудалев В.Г., КрыжановскаяЮ.А.

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

Рекомендуется длястудентов 4 курса д/о и 4 курса в/о факультета ПММ.

3 Данное пособие, являющееся продолжением части I пособия «Разработка приложений баз данных в среде Delphi» к курсу «Базы данных и экспертные системы», содержит сведения по созданию приложений в среде «клиентсервер». Материал основывается на Delphi версии 6 и СУБД Interbase 5.5-6.0. Для работы с пособием необходимо знание основных компонентов Delphi для работы с базами данных в рамках пособия [3] и знакомство с языком SQL.

Разделы 1, 4, п. 2.1-2.3 написаны В.Г.Рудалевым, п. 2.4-2.5, раздел 3 – Ю.А.Крыжановской.

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

InterBase идеально подходит длясоздания информационных систем малых и средних предприятий. Ряд особенностей делает InterBase, по мнению корпорации Borland и ряда независимых экспертов, пригодной и длякрупных предприятий:

• Универсальность. InterBase выпускается дляразличных программноаппаратных платформ: рабочих групп с сервером под управлением Novell NetWare или доменов на базе Windows 2000 Server, информационных систем на базе серверов IBM, Hewlett-Packard, SUN, SGI и др. InterBase поддерживает стандарт ANSI SQL 92, корректно работает с национальными (в том числе и с кириллическими) кодировками как в Windows, так и в Unix.

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

• Реально IB может обслуживать БД размером в 10-20 гигабайт, при размере одного файла БД 2 гигабайта. Многофайловая БД может состоять из 65535 файлов, таким образом теоретический предел для одной базы данных составляет 132 терабайта.

Преимущества более «крупнокалиберных» систем (Oracle, DB2) проявляются в скорости работы с большими массивами данных. В InterBase отсутствуют собственные средства создания приложений и Caseпроектирования баз данных, что компенсируется многочисленными программными продуктами сторонних фирм.

Благодаря удачному сочетанию низких системных требований и высокой надежности InterBase хорошо себяпроявил на Бостонской бирже, в проекте Magnavox в вооруженных силах США, на Межбанковской Валютной Бирже ММВБ, в Центре Управления Полетами, во внешнеторговой корпорации Авиаэкспорт и др.

1. Основы работы в InterBase 1.1. Interbase Interactive SQL Утилита Interbase Windows Interactive SQL (сокращенно ISQL) – основная утилита в InterBase дляработы с БД. Ее функции:

• Создание базы данных • Создание таблиц и метаданных БД • Соединение с БД и выполнение SQL-запросов • Отображение информации о БД.

Задачи администрирования решаются с помощью утилиты Server Manager. В целом функциональные возможности WISQL невелики, но существуют многочисленные утилиты сторонних фирм, эти возможности расширяющие.

WISQL успешно работает и с файлами БД, созданными в InterBase старших версий.

Основной инструмент InterBase версий 6-7 – утилита IBConsole. Ее характеризуют совершенно новый интерфейс, минимум новых возможностей и более жесткие лицензионные ограничения.

1.1.1. Создание базы данных Обратитесь кадминистратору базы данных, чтобы он зарегистрировал Вас на сервере Interbase под именем (например, 4k4gr) и паролем. Если администратором являетесь Вы, то сделайте это самостоятельно спомощью утилиты Interbase Server Manager (см. п. 2.1).

Предположим, что сервер InterBase запущен на компьютере с сетевым именем c1r214srv, там же в папке d:\ib\4k расположены файлы баз данных.

Папка d:\ib доступна пользователям сети в виде логического диска V:.

Создайте папку, например V:\4k\folder. Запустите утилиту ISQL и выберите пункт меню File | Create DataBase.

Если серверзапущен у Вас на локальной машине (тогда он будет виден в виде значка в правой части панели задач Windows), то в появившемся окне требуется пометить “Local Engine” и указать путь кфайлу БД, далее указать имя администратора (SYSDBA) и пароль (masterkey - пароль администратора по умолчанию). Пароль администратора затем можно сменить, а также добавить новых пользователей с помощью утилиты InterBase Server Manager.

При работе в Windows-сетях необходимо выбрать в поле Network Protocol протокол TCP/IP или NetBEUI, в Novell-сетях – Novell SPX.

Обратите внимание, что разрешается указывать только локальные пути (D:\ib\4k\folder\sklad.gdb), буквы сетевых дисков (например, V:\4k\folder\sklad.gdb) использовать нельзя.

Если все было сделано правильно, в папке D:\ib\4k\folder появится файл sklad.gdb, несодержащий пока таблиц.

Послеуспешного создания БД работу утилиты можно завершить.

1.1.2. Создание таблиц и других объектов InterBase Для создания таблиц, генераторов, триггеров и других метаданных (как, впрочем, и длявыполнения любых SQL-запросов) необходимо соединиться с уже существующей БД. Дляэтого послезапуска ISQL выберите пунктменю "File|Connect to Database", появится диалоговое окно для ввода имени пользователя и пароля Создание таблиц выполняется, как обычно, с.



помощью оператора CREATE TABLE. Все созданные объекты будут храниться в одном файле *.gdb.

В ISQL существует два способа выполнения операторов SQL: в первом способе текст оператора следует набрать в окне SQL Statement; во втором - выбрать пункт "File|Run an ISQL Script..." и указать имя скриптового файла (скрипта). Скрипт (текстовый файл с расширением.sql.) содержит последовательность SQL-операторов, предназначенных для создания объектов БД. В скриптах также удобно хранить часто используемые SQLоператоры для работы с БД. Пример скрипта для создания БД и всех объектов, в ней содержащихся, приведен в п. 4.2.

Более удобным способом создания объектов БД для Interbase является использование утилиты Delphi SQL Explorer.

Замечание. В литературе рекомендуется для корректной работы с русскими буквами настраивать InterBase специальным образом:

указывать строку DEFAULT CHARACTER SET WIN1251 при создании БД и атрибут COLLATE PXW_CYRL при определении полей, выбирать драйвер LANGUAGE DRIVER = Pdox ANSI Cyrillic при определении алиаса в BDE.

Однако реально все это необходимо только дляправильной работы функции UPPER языка SQL. По мнению авторов, гораздо рациональнее (и надежнее!) неменять языковых настроек а использовать вместо UPPER UDF-функции, из модуля CASEUDF, который можно скачать по адресу http://www.ibase.ru/ download/caseudf.zip (см. также п.2.5).

1.1.3. Получение информации о структуре базы данных В ISQL можно получить полную информацию о структуре базы данных:

список таблиц и их структуры, списки и текст триггеров, хранимых процедур и т.п. Эту операцию можно выполнить в пункте меню View или Extract.

Например для созданной в гл.4 базы данных Sklad, выберем "Extract|SQL, Metadata for Table" длятаблицы Cust. В окошке ISQL Output появится текст оператора, который создавал данную таблицу и оператора, определившего первичный ключ:

/* Extract Table CUST */ /* Table: CUST, Owner: RUD */ CREATE TABLE CUST (NC SMALLINT NOT NULL, NAME VARCHAR(20), ADDRESS VARCHAR(20), CONSTRAINT CUSTPRIMARYKEY1 PRIMARY KEY (NC));

1.2. SQL Explorer Применительно к InterBase утилита SQL Explorer обладает множеством дополнительных возможностей, превращающих ее в удобный полнофункциональный инструмент.

1.2.1. Создание алиаса.

Выберите пункт меню New, в окне New Database Alias задайте значение IntеrBase. Переименуйте алиас, указав вместо Interbase1 имя IbSklad, в строке Server Name установите путь к базе данных c1r214srv:d:\ib\4gr\folder\sklad.gdb, в строке User Name задайте имя пользователя - 4k4gr. Путь можно задавать либо в формате <Имя компьютера>:<путь> (если используется протокол TCP/IP), либо \\<Имя компьютера>\<путь> (протокол NetBEUI).

Если ранее выбиралось Local Engine (сервер запущен на этом же компьютере), то <имя компьютера> можно неуказывать.

Примените изменения, выбрав пункт меню File – Apply.

1.2.2. Соединение с БД Щелкните по значку + напротив алиаса (раскройте алиас). В диалоговом окневведите имя пользователя, например 4k4gr и пароль.

1.2.3. Создание таблиц Выберите в контекстном меню дляветви Tables пункт New (создание новой таблицы). Появится ветка Table1, переименуйте ее на Detal.

Для создания столбца раскройте Detal, выберите для ветки Columns в контексном меню пункт New (создание нового столбца), измените название столбца с Column1 на nd, установите его тип integer, в строке Nulls установите No (полеnd будет первичным ключом).

Аналогично создайте другие столбцы, затем выделите Detal и выполните File – Apply. Таблица создана, и ее структура будет иметь вид:

1.2.4. Создание первичного ключа.

Выберите Primary Key - New, затем Columns –New и подставьте значение nd.

1.2.5. Создание генератора.

Выберите ветвь Generators - New, измените имя G1, подставьте начальное значение 0.

Заметим, что для каждого действия можно просмотреть соответствующий SQL-оператор на закладке Text. Действие вступает в силу послеприменения (команда меню Apply).

1.2.6. Создание триггера для автоматического заполнения первичного ключевого поля при добавлении новой записи.

В ветви Detal выберите Triggers – New. Измените имя триггера – By_nd, на вкладке Definition укажите в полеType значение Before insert, а на вкладке Text между Begin и End введите строку new.nd=gen_id(g1,1);

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

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

1.3. Переход к InterBase На практике часто бывает, что к моменту перевода информационной системы предприятия на архитектуру клиентсервер необходимые таблицы, заполненные информацией, уже существуют, но в формате локальных СУБД *.dbf, Paradox, Access. Как преобразовать их к формату InterBase, сохранив, по возможности, данные Во многих (но нево всех) случаях здесь может помочь компонентTBatchMove, предназначенный длякопирования записей из одного набора данных в другой. При копировании компонент преобразует форматы, автоматически сохраняя имена столбцов, типы и содержимое данных.

Основные свойства TBatchMove:

Source – имя набора данных (таблицы или запрос), откуда копируются данные, Destination – имя НД, куда копируются данные, Mode - тип копирования. Если задать тип batCopy, то таблица для НД Destination будет создана заново в соответствии со структурой таблицы НД Source и заполнена ее данными.





Копирование происходит при выполнении метода Execute. Другой вариант - использование утилиты datapump.exe (выполненной на основе компонента TBatchMove), находящейся в папке BDE.

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

2. Особенности клиент-серверных приложений 2.1. Общие принципы 2.1.1. Проектирование БД Не следует слишком увлекаться нормализацией базы данных. Во всем нужна мера. Нормализация способствует целостности БД, исключает из таблиц избыточную информацию и сокращает размер БД. Побочные эффекты – замедление работы при доступе к множеству небольших таблиц и нарушение восприятия предметной области разработчиком – в клиентсерверной среде могут оказаться более значимыми.

2.1.2. Проектирование приложений.

Настоятельно рекомендуются:

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

Действие Инструмент Заполнение уникальных ключей Генераторы Поддержка ссылочной целостности Триггеры Ведение статистики Триггеры Бизнес-правила, связанные с изменением Триггеры нескольких таблиц в рамках одной транзакции Ограничения на значения вводимых данных Предложение CHECK при создании таблиц БД Запросы, включающие сложные алгоритмы с Хранимые процедуры циклами и ветвлением Часто используемые в SQL-операторах функции UDF, выполняющиеся на сервере Интерфейс с пользователем, формирование Клиентское приложение запросов и интерпретация результатов • Использование компонента TDataBase. Компонентустанавливает одно общее соединение с сервером для всех компонентов DataSet, в противном случае каждый набор данных создает отдельное соединение, что снижает эффективность доступа.

• Использование TQuery вместо TTable. Предложение WHERE предпочтительнее, чем фильтр как выполняется на сервере, а нена, так клиентской машине.

2.2. Транзакции 2.2.1. Управление транзакциями Транзакция – это группа операций, рассматриваемая как единое целое. В случае успеха транзакция подтверждается, в случае неудачи – целиком отменяется. При каждом выполнении оператора SQL порождается транзакция. Также неявно транзакция порождается при вызове навигационных методов редактирования наборов данных (Insert, Edit и т.п.) и при редактировании с помощью TDBGrid. Завершается неявная транзакция вызовом методов Post или Cancel.

Предпочтительным является явное управление транзакциями. Для этого используются либо операторы языка SQL (SET TRANSACTION, COMMIT, ROLLBACK), либо соответствующие им свойства и методы компонента TDataBase [2]. Рассмотрим последние более подробно. Вызов метода StartTransaction означает, что все последующие операторы, изменяющие данные, относятся ктекущей активной транзакции. Активной называется незавершеннаятранзакция. Завершается транзакция вызовом метода Commit – подтверждение транзакции (изменения окончательно фиксируются в БД) или RollBack – откат транзакции (данные оказываются в состоянии, предшествовавшем началу транзакции). Свойство IsTransaction типа Boolean позволяет проверить, имеются ли в настоящий момент активные транзакции (в данном приложении!). Если есть, то начинать транзакцию (метод StartTransaction) нельзя.

При организации транзакции рекомендуется использовать механизм исключительных ситуаций try … except. В приводимом ниже примере транзакцией (неразрывной операцией) является отпусктовара со склада, сопровождающийся уменьшением остатка на складе (таблица Detal) и добавлением заказа (таблица CD):

if Otpusk <= Ostatok then begin dbSklad.StartTransaction; // Начало транзакции try qrCD.Append ; // Изменение нового заказа qrCdTotal.AsString:= …;

qrCd.Post;

qrDetal.Edit; // Уменьшить остаток qrDetalOst.Value:=Ostatok-Otpusk;

QrDetal.Post;

dbSklad.Commit; // Фиксация транзакции except dbSklad.RollBack; // Откат транзакции ShowMessage('Ошибка транзакции!');

end;

end else ShowMessage ('На складе нет нужного количества!');

При использовании компонентов Interbase Express даннаястандартнаясхема несколько изменяется (см. п. 2.3.2).

2.2.2. Взамодействие транзакций Взаимодействие нескольких транзакций, вызванных различными клиентскими приложениями, при доступек одним и тем же данным можно отрегулировать, определив уровни изоляции транзакций с помощью свойства TransIsolation: TTransIsolation компонента TDataBase. Значения свойства обозначаются константами tiDirtyRead («грязное чтение»), tiReadCommited (чтение подтверждений), tiRepeatableRead («повторяемое» чтение).

При уровне DirtyRead транзакции видят все изменения, в том числе и те, которые могут быть впоследствии отменены (RollBack). Поясним, что и неподтвержденные изменения физически записаны в базе данных.

Использовать DirtyRead не рекомендуется, так как транзакции взаимно не изолируются и располагают поэтому недостоверными данными.

Неудивительно, что в целях безопасности в InterBase уровень DirtyRead недоступен и автоматически трактуется как ReadCommited.

При уровне ReadCommited видны только подтвержденные изменения.

Pages:     || 2 | 3 | 4 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.