с удаленными базами данных




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

Основные понятия

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

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

Однако архитектуре "файл-сервер" свойственны и существенные недостатки.

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

□ Требуется синхронизация работы отдельных пользователей, связанная с бло­кировкой в таблицах тех записей, которые редактирует другой пользователь.

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


358


Часть III. Удаленные базы данных


Из-за этих недостатков архитектура "файл-сервер", как правило, используется в небольших сетях. Для сетей с большим количеством пользователей предпочти­тельным вариантом (а порой и единственным возможным) является архитектура "клиент- сервер".

Архитектура "клиент-сервер"

В сетевой архитектуре "клиент-сервер" БД размещается на компьютере-сервере сети (сервере или удаленном сервере) и называется также удаленной БД. При­ложение, осуществляющее работу с этой БД, находится на компьютере пользо­вателя. Приложение пользователя является клиентом, его также называют приложением-клиентом.

Клиент и сервер взаимодействуют следующим образом. Клиент формирует и отсылает запрос (SQL-запрос) серверу, на котором размещена БД. Сервер вы­полняет запрос и выдает клиенту в качестве результатов требуемые данные.

Таким образом, в архитектуре "клиент-сервер" клиент посылает запрос и полу­чает только те данные, которые ему действительно нужны. Вся обработка запро­са выполняется на удаленном сервере. К достоинствам такой архитектуры отно­сятся следующие факторы.

□ Для работы с данными используется реляционный способ доступа, что снижает нагрузку на сеть.

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

□ В приложении отсутствует код, связанный с управлением БД, поэтому при­ложения упрощаются.

Отметим, что сервером называют не только компьютер, но и специальную про­грамму, которая управляет БД. Так как в основе организации обмена данными между клиентом и сервером лежит язык SQL, такую программу еще называют SQL-сервером, а БД — базой данных SQL. В широком смысле слова под сервером понимают компьютер, программу и саму базу данных. SQL-серверами являются промышленные СУБД, такие как InterBase, Oracle, Informix, SyBase, DB2, Mi­crosoft SQL Server и др. Каждый из серверов имеет свои преимущества и осо­бенности, связанные, например, со структурой БД и реализацией языка SQL, которые необходимо учитывать при разработке приложения. Далее мы будем понимать под сервером программу (т. е. SQL-сервер), а установленную на компьютере-сервере базу данных будем называть удаленной БД.

При работе в архитектуре "клиент-сервер" приложение должно:

□ устанавливать соединение с сервером и завершать его;

□ формировать и отсылать запрос серверу, получая от него результаты выпол­нения запроса;

□ обрабатывать полученные данные.

При этом обработка данных не имеет принципиальных отличий по сравнению с обработкой данных в локальных БД.


Глава 13. Введение в работу с удаленными базами данных


359


Сервер и удаленная БД

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

(_____ ЗамечаниеJ

Для удаленных БД поле называется столбцом.

Для управления БД сервер использует:

□ триггеры;

□ генераторы;

□ хранимые процедуры;

□ функции, определяемые пользователем;

□ механизм транзакций;

□ механизм каптированных изменений;

□ механизм событий.

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

Средства работы с удаленными БД

Система Delphi обеспечивает разработку приложений для различных серверов, предоставляя для этого соответствующие средства. Отметим, что многие опи­санные ранее принципы разработки приложений и средства для работы с ло­кальными БД относятся и к работе с удаленными БД. В частности, для разра­ботки приложений используются такие компоненты, как источник данных DataSource, наборы данных Table, ADOTable, SQLTable, IBTable, Query, ADOQuery И SQLQuery, Сетка DBGrid И Др.

СЗамечание ^

Для реализации реляционного способа доступа к удаленной БД с помощью BDE не­обходимо использовать только средства языка SQL. Поэтому в качестве компонен­тов должны выбираться такие как Query, StoredProc или UpdateSQL. Кроме того, для набора данных нельзя использовать методы, характерные для навигационного способа доступа, например, Next и Previous для перемещения текущего указателя или Edit, Insert, Append или Delete для изменения записей.


360


Часть III. Удаленные базы данных


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

Queryl.Close;

Queryl.SQL.Clear;

Queryl.SQL.Add('DELETE FROM Personnel WHERE Position = 'Менеджер');

Queryl.ExecSQL;

Для работы с таблицами и запросами по-прежнему можно использовать такие программы, как Database Desktop и SQL Explorer.

Средства Delphi, предназначенные для работы с удаленными БД, можно разде­лить на два вида:

□ инструменты; □ компоненты.

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

□ InterBase Server Manager — программа управления запуском сервера InterBase;

□ IBConsole — консоль сервера InterBase;

□ SQL Monitor — программа отслеживания порядка выполнения SQL-запросов

к удаленным БД.

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

□ Database (соединение с БД);

□ session (текущий сеанс работы с БД);

□ storedProc (вызов хранимой процедуры);

□ updateSQL (модификация набора данных, основанного на SQL-запросе);

□ DCOMConnection (DCOM-соединение);

□ компоненты страниц ADO, dbExpress и InterBase Палитры компонентов.

Отметим, что многие из названных компонентов, например, Database, UpdateSQL и Session, используются также при работе с локальными БД. Так, компонент Database позволяет реализовать механизм транзакций, как было по­казано в главе 7, посвященной навигационному способу доступа к данным с помощью механизма BDE. Однако наиболее часто эти компоненты применяются именно при работе с удаленными базами.

Часть компонентов, например, клиентский набор данных ciientDataSet и со­единение с сервером DCOMConnection, предназначена для работы в трехуровне­вой (трехзвенной) архитектуре "клиент-сервер" ("тонкий" клиент) и используется для построения сервера приложений.

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


Глава 13. Введение в работу с удаленными базами данных


361


помощью программы IBConsole (в ее окне Interactive SQL) необходимо набрать и выполнить SQL-запрос (инструкцию) create table. Если создание таблицы с помощью механизма BDE осуществляется из приложения пользователя, то для этой цели используется набор данных Query, который выполняет такой же за­прос. Основное различие заключается в том, каким образом выполняется SQL-запрос к удаленной БД.

Итак, для удаленных БД разница между средствами, используемыми в приложе­нии, и инструментами намного меньше, чем для локальных баз данных. Поэто­му далее для удаленных БД использование инструментов (на примере програм­мы IBConsole) и создание приложений рассматриваются параллельно.

Сервер InterBase

Все серверы имеют похожие принципы организации данных и управления ими. В качестве примера рассмотрим работу с сервером InterBase 6.x, который явля­ется "родным" для Delphi. Совместно с Delphi поставляются две части сервера InterBase 6.x: серверная и клиентская. Несмотря на то что сервер InterBase поставляется совместно с Delphi, устанавливается он отдельно: после установки Delphi выдается запрос на установку сервера InterBase. Установка происходит в автоматическом режиме, основные файлы сервера копируются в подкаталог INTERBASE, находящийся в каталоге BORLAND. Отметим, что бесплатная пробная (trial) версия сервера доступна по адресу www.borland.com/interbase.

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

□ скопировать БД на сервер;

□ установить для приложения новые параметры соединения с удаленной БД.

Скопировать БД можно с помощью программ типа Проводник Windows.

Клиентская часть нужна для обеспечения доступа приложения к удаленной БД.

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

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


362


Часть III. Удаленные базы данных


При рассмотрении инструкций языка будем опускать несущественные операнды и элементы. При описании формата инструкций языка SQL используются следующие правила:

□ символы < и > обозначают отдельные элементы формата инструкций, напри­мер, имена таблиц и столбцов, и при записи инструкций SQL не указываются;

□ в квадратные скобки заключаются необязательные элементы конструкций языка;

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

Для наглядности зарезервированные слова языка SQL будем писать заглавными (прописными) буквами, а имена — строчными (маленькими). Регистр букв не влияет на интерпретацию инструкций языка.

Бизнес-правила

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

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

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

Для программирования бизнес-правил в приложении используются компоненты и их средства. Достоинство такого подхода заключается в легкости изменения бизнес-правил и возможности определить правила "своего" приложения. Недос­татком является снижение безопасности БД, связанное с тем, что каждое при­ложение может устанавливать свои правила управления БД. В главе 7, посвя­щенной навигационному способу доступа, мы рассмотрели программирование бизнес-правил в приложении на примере каскадного удаления записей в свя­занных локальных таблицах.


Глава 13. Введение в работу с удаленными базами данных


363


Организация данных


Информация всей БД сервера InterBase хранится в одном файле с расширением gdb. Размер этого файла может составлять единицы и даже десятки гигабайт. Отметим, что аналогичный размер БД имеет СУБД Microsoft SQL Server, в то время как для более мощных СУБД Oracle и SyBase размер БД достигает десят­ков и сотен гигабайт.

□ таблицы; □ индексы; □ ограничения; □ домены; □ просмотры; □ генераторы;

В отличие от локальной БД, структуру которой составляли таблицы (отдельные или связанные), удаленная БД имеет более сложную структуру, которая включа­ет в свой состав следующие элементы:

□ триггеры;

□ функции пользователя;

□ хранимые процедуры;

□ исключения;

□ BLOB-фильтры;

□ привилегии.

Элементы структуры удаленной БД также называют метаданными. Слово "мета" имеет смысл "над", т. е. метаданные представляют собой данные, которые опи­сывают структуру БД.

Для InterBase максимальное число таблиц в БД равно 65 536, а максимальное число столбцов в таблице — 1000. Отметим, что таблицы InterBase имеют мень­шее число допустимых типов столбцов (полей), чем таблицы локальных БД Paradox. Типы столбцов базы InterBase приведены в табл. 13.1.

Таблица 13.1. Типы столбцов таблиц InterBase


364


Часть III. Удаленные базы данных


В таблицах InterBase отсутствуют такие типы, как логический и автоинкремент­ный. Логический тип заменяется типом char (1), а вместо автоинкрементного типа для обеспечения уникальных значений используются генераторы и триггеры.

Запуск сервера

Для запуска сервера предназначена программа InterBase Server Manager (рис. 13.1), вызываемая одноименной командой главного меню Windows или через Панель управления. Функции управления сервером InterBase, например, управление подключением к серверу пользователей и просмотр информации о БД, в последних версиях Delphi реализует программа IBConsole.

Состояние сервера выводится в панели Status: запущенному состоянию сервера соответствует надпись Running, остановленному — Stopped.

Сервер InterBase может запускаться автоматически или в ручном режиме, чем управляют переключатели группы Start Mode (Режим запуска). Если выбран переключатель Automatic, то сервер будет автоматически вызываться при каждом запуске (перезапуске) Windows. Если же выбран ручной запуск (Manual), то сер­вер запускается нажатием кнопки Start. После запуска сервера кнопка Start из­меняет свое название на Stop, и ее повторное нажатие приводит к остановке сервера.

В Windows NT сервер можно запустить как службу (service). Установленный флажок Run the InterBase server as a service on Windows NT указывает, что сервер InterBase запускается как служба Windows NT.


Глава 13. Введение в работу с удаленными базами данных


365


Панель Root Directory показывает главный каталог, в котором установлен сервер InterBase и который можно изменить, нажав кнопку Change и выбрав нужный каталог. Однако на практике изменять главный каталог не требуется.

Завершить работу сервера также можно, открыв щелчком мыши на значке кон­текстное меню и выбрав команду Shutdown.

При запущенном сервере с помощью кнопок Server Properties (Свойства сервера) и Guardian Properties (Свойства безопасности) открываются диалоговые окна настройки соответствующих свойств. Обычно в них уже заданы нужные значения, изменять которые нет необходимости.

При запуске сервера в качестве службы Windows NT управлять его параметрами, а также остановить сервер можно в окне Services.

Особенности приложения

Есть основные принципы разработки и использования приложений, выпол­няющих операции с удаленными БД. Эти принципы являются общими для раз­личных систем, например, таких как InterBase, Microsoft SQL Server или Oracle. Поэтому примеры программ (приложений) для работы с БД InterBase, которые приводятся ниже, годятся и для других серверов. При разработке приложений использованы компоненты, стандартные для всех БД.

Наряду с этим в Delphi имеется ряд компонентов, предназначенных только для работы с сервером InterBase. Эти компоненты расположены на странице InterBase Палитры компонентов. Многие из них являются аналогами соответст­вующих компонентов страницы BDE и отличаются тем, что адаптированы спе­циально под InterBase.

Особенность использования данных компонентов заключается в том, что для них доступ к БД осуществляется напрямую через процессор баз данных BDE. При этом нет необходимости в соответствующем драйвере SQL-Links.

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

Соединение с базой данных

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

Рассмотрим, как установить соединение с удаленной БД с помощью программы IBConsole и компонентов Delphi, поддерживающих механизм доступа BDE.


366 Часть III. Удаленные базы данных

Соединение с базой из программы IBConsole

Перед установлением соединения с БД нужно с помощью команд Server\Register и Server\Login выполнить регистрацию сервера InetrBase, а также задать имя и пароль пользователя.

(_____ ЗамечаниеJ

Заметим, что первоначально на сервере InetrBase для пользователей есть стандарт­ное имя SYSDBA и пароль "masterkey", которые могут изменяться администратором.

Соединение с БД выполняется командой Database\Connect. После открытия БД доступна для работы, например, для изменений структуры путем добавления и удаления таблиц или для редактирования данных.

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

На программном уровне соединение с БД выполняет инструкция conn(ct, имеющая следующий формат:

CONN(CT DATABA6("<Имя файла БД>"

86(5 "<Имя пользователя^' PASSWORD "<Пароль пользователя^'

Отключение от БД выполняет инструкция exit.

Компонент Database

Компонент Database служит для соединения с БД. Если программист при раз­работке приложения не разместил в форме компонент Database, то для органи­зации соединения с БД в процессе выполнения приложения будет создаваться динамический (временный) объект типа TDatabase. Динамическое создание это­го объекта выгодно тем, что не требует от программиста каких-либо действий. Однако при использовании динамического объекта типа TDatabase он автома­тически создается для каждого соединения с БД, что при одновременной работе с несколькими БД требует больших ресурсов Windows, чем в случае применения компонента Database.

Использование компонента Database позволяет:

□ настраивать параметры соединения с БД;

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

Компонент Database можно использовать для локальных и для удаленных БД. Например, действия, связанные с настройкой псевдонимов BDE, одинако­вы для обоих типов БД.

Свойство sessionName типа string указывает компонент сеанса session, с ко­торым связан компонент Database. Если значение этого свойства не задано


Глава 13. Введение в работу с удаленными базами данных


367


(пустое значение или значение Default), то для сеанса создается динамический объект типа TSession (объект по умолчанию).

Свойство AliasName типа string указывает псевдоним БД. На этапе разработки приложения псевдоним выбирается из списка в окне Инспектора объектов.

Расположение БД может быть определено также с помощью свойства DriverName типа string, задающего драйвер БД. Следует иметь в виду, что зна­чения этого свойства и свойства AliasName являются взаимоисключающими: при установке одного из них второе автоматически сбрасывается. Если распо­ложение БД задано значением свойства DriverName, то остальные параметры соединения должны быть заданы через свойство Params.

Свойство DatabaseName типа string задает имя БД, используемое в приложе­нии для соединения с БД. Отметим, что это имя не совпадает ни с псевдони­мом, ни с собственно именем БД (именем главного ее файла). Имя БД, задан­ное свойством DatabaseName, действует только в приложении и только для организации подключения к БД, указанной ее псевдонимом.

Впоследствии набор данных (обычно Query) связывается с БД через свойство DatabaseName, значение которого должно совпадать со значением одноименного свойства компонента Database, используемого для соединения. На этапе разра­ботки приложения имя БД для набора данных выбирается в окне Инспектора объектов в списке, содержащем его наряду с псевдонимами BDE.

Свойство Params типа TStrings определяет параметры соединения, для измене­ния которых при разработке приложения используется редактор списка значе­ний Value List editor, вызываемый двойным щелчком в области значения Ин­спектора объектов. С его помощью можно (неясно, почему) установить значение одного параметра: в поле Key указывается имя параметра, а в поле Value указывается значение параметра.

Нажатие кнопки Code Editor преобразует список к текстовому виду и отображает его на отдельной вкладке в окне редактора кода (рис. 13.2). В окне редактора кода можно задавать и редактировать произвольное число параметров. Более того, те­перь при двойном щелчке в области значения свойства Params Инспектора объек­тов всегда происходит вызов редактора кода, а не редактора Value List editor.


368


Часть III. Удаленные базы данных


В приведенном на рис. 13.2 примере указаны имя сервера, имя пользователя и его пароль. Отметим, что имя сервера лучше задавать через псевдоним, что об­легчает перенос БД на другое место.

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

procedure TForml.ButtonlClick(Sender: TObject);

begin

Editl.text:= Database1.Params[1];

end;

Здесь при нажатии кнопки в поле редактирования (компонент Edit) выводится второй параметр соединения.

В частности, для параметров, приведенных на рис. 13.2, будет получена сле­дующая строка:

USER NAME = SYSDBA

Кроме параметров, заданных в свойстве Params компонента Database, соедине­ние с БД также определяется:

□ установками системных параметров BDE;

□ параметрами драйвера, используемого для доступа к БД;

□ параметрами псевдонима БД.

Если в списке Params какой-либо параметр, например, langdriver, не задан, он выбирается из перечисленных выше установок. Поэтому с помощью свойства Params нужно устанавливать (переустанавливать) только те параметры, значения которых не устраивают разработчика.

Свойство LoginPrompt типа Boolean управляет режимом отображения окна вво­да имени пользователя и пароля Database Login (рис. 13.3). По умолчанию свой­ство имеет значение True, и окно появляется при первом соединении с БД. Ес­ли установить свойство LoginPrompt в значение False, то запрос на идентификацию пользователя не выдается, и его имя и пароль должны быть указаны в параметрах соединения (свойство Params).

Свойство KeepConnection типа Boolean определяет, сохранять ли соединение с БД, если с ней не связан ни один набор данных. По умолчанию свойство имеет значение True, и однократно установленное соединение сохраняется в течение всей работы с БД. Использование постоянного соединения с БД экономит вре­мя, затрачиваемое на доступ к данным, но требует определенных системных затрат на его поддержание. Постоянное соединение разрывается при окончании работы приложения или при программной установке свойства connected в зна­чение False.


Глава 13. Введение в работу с удаленными базами данных


369


Рис. 13.3. Окно ввода имени пользователя и пароля

На этапе разработки управлять значениями названных свойств можно в окне Редактора параметров соединения (рис. 13.4). Оно вызывается двойным щелч­ком на компоненте Database или вызовом команды Database editor контекстно­го меню компонента.

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

□ поле редактирования Name — свойство DatabaseName;

□ комбинированный список Alias name — свойство AiiasName;

□ комбинированный список Driver name — свойство DriverName;

□ многострочное поле редактирования Parameter overrides (Новые значения

параметров) — свойство Params;

□ флажок Login prompt (Входное сообщение) — свойство LoginPrompt;


370


Часть III. Удаленные базы данных


П флажок Keep inactive connection (Сохранять неактивное соединение) — свой­ство KeepConnection.

Отметим, что на рис. 13.3 и 13.4 в качестве имени базы данных выводится именно значение свойства DatabaseName, а не имя (значение свойства Name) компонента Database.

Свойство connected типа Boolean определяет, установлено ли соединение с БД. Соединение с БД можно установить при разработке приложения, задав для это­го свойства значение True через Инспектор объектов.

При выполнении приложения можно также установить или разорвать соедине­ние с БД, используя методы opennciose соответственно.

Свойства DataSetcount и DataSets позволяют получить доступ к наборам дан­ных, связанным в настоящий момент времени с БД. Свойство DataSetcount типа integer определяет число таких наборов, а свойство DataSets [index: integer] типа TDBDataSet представляет собой коллекцию (массив) этих наборов данных. Доступ к отдельному набору данных можно получить по его номеру в массиве (нумерация начинается с нуля, т. е. последний набор данных имеет но­мер DataSetcount - 1).

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

Методы startTransaction (иницирует начало транзакции), commit (подтверж­дает текущую транзакцию и Rollback (отменяющий ее) были рассмотрены в главе 7, посвященной навигационному способу доступа к данным с помощью механизма BDE.

Свойство inTransaction типа Boolean позволяет определить, существует ли ак­тивная транзакция для текущего соединения с БД. Если имеется незавершенная транзакция, то свойство имеет значение True, и значение False — в противном случае. Это свойство можно использовать, например, при подтверждении тран­закции. Если активной транзакции нет, то вызов метода commit приводит к ге­нерации исключения. Например:

if Databasel.InTransaction then Databasel.Commit;

Если имеется активная транзакция, то она подтверждается, а все сделанные в ее рамках изменения БД вступают в действие.

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

□ tiDirtyRead — разрешается чтение изменений в записях БД, сделанных в рамках других транзакций (другими пользователями). В связи с тем, что на


Глава 13. Введение в работу с удаленными базами данных


371


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

□ tiReadCommitted — разрешается чтение только подтвержденных изменений в записях БД (по умолчанию). Если изменения еще не подтверждены, то читается предыдущая версия записи.

□ tiRepeatabieRead — считывание сразу всей БД, после чего изменения в БД, сделанные в рамках других транзакций, становятся невидимыми. Этот уро­вень обеспечивает максимальную изоляцию.

Для локальных БД dBase и Paradox допустимым является только значение tiDirtyRead. Для сервера InterBase значение tiDirtyRead интерпретируется как

tiReadCommitted.

Компонент Session

Компонент session представляет собой текущий сеанс работы с БД и наряду с компонентом Database используется для управления соединением с БД. Однако если компонент Database позволяет задавать параметры одного соединения с БД или параметры соединения с одной БД, то компонент session управляет всеми соединениями со всеми БД. Если программист при разработке приложе­ния не разместил в форме компонент session, то будет создаваться динамиче­ский (временный) объект ТИПа TSession (TSessionList).

Наряду с управлением соединениями с БД, использование компонента session также позволяет:

□ управлять установками BDE;

□ управлять паролями БД.

Свойство sessionName типа string задает имя сеанса. Это имя устанавливается программистом, и его назначение не совпадает с назначением свойства Name, которое определяет имя самого компонента session. Однако в частном случае эти имена могут совпадать.

Свойства сеанса, заданного компонентом session, действуют на все связанные с ним компоненты Database. Напомним, что компонент Database связывается с сеансом через свое свойство SessionName, значение которого при разработке приложения выбирается в списке Инспектора объектов.

С ПОМОЩЬЮ СВОЙСТВ DatabaseCount И Databases МОЖНО получить доступ К ак­тивным БД, с которыми в настоящее время установлено соединение. Свойство DatabaseCount типа Integer содержит ЧИСЛО таких БД, а СВОЙСТВО Databases [Index: Integer] типа TDatabase представляет собой коллекцию (массив) объектов Database, используемых для соединения с этими БД. Доступ к отдельной БД можно получить по ее номеру в массиве (нумерация начинается с нуля, поэтому последняя БД имеет номер DatabaseCount - 1).


372


Часть III. Удаленные базы данных


Свойство KeepConnections типа Boolean определяет, сохранять ли соединение с БД, если с ней не связан ни один набор данных. Это свойство аналогично свойству KeepConnection соединения с отдельной БД, заданного компонентом Database. Разорвать соединение с БД можно, вызвав метод DropConnections.

Свойства NetFileDir И PrivateDir ТИПа String ПОЗВОЛЯЮТ задать катЭЛОГИ ДЛЯ

хранения управляющего сетевого файла с расширением net (для таблиц Paradox) и рабочего каталога для хранения временных файлов сеанса соответственно.

Свойство Active типа Boolean управляет активностью сеанса. Установка этого свойства в значение True активизирует сеанс, а значения False — деактивизи-рует его. При выполнении приложения управлять активностью сеанса можно также с помощью методов opennciose соответственно.

Непосредственно перед активизацией сеанса генерируется событие Onstartup

ТИПа TNotifyEvent.

Для управления установками BDE компонент session имеет средства, позво­ляющие читать и изменять параметры драйверов и псевдонимов БД. Рассмотрим наиболее важные из них.

Методы GetAliasNames И GetAliasParams обеспечивают получение информа­ции о псевдонимах BDE. Процедура GetAliasNames (List: TStrings) позволяет получить список псевдонимов BDE. Список заносится в объект, заданный па­раметром List типа TStrings, которым может быть, например, список строк компонента ListBox. Приведем соответствующий пример:

procedure TForml.ButtonlClick(Sender: TObject);

begin

Sessionl.GetAliasNames(ListBoxl.Ltems);

end;

Здесь нажатие кнопки Buttoni приводит к загрузке в компонент ListBoxl спи­ска псевдонимов BDE. Предыдущее содержимое компонента ListBoxl теряется.

Процедура GetAliasParams (const AliasName: String; List: TStrings) воз­вращает параметры конкретного псевдонима, имя которого задано параметром процедуры AliasName. Если имя псевдонима указано неправильно, то генерируется исключение. Например:

procedure TForml.Button2Click(Sender: TObject);

begin

Sessionl.GetAliasParams(Editl.Text, ListBoxl.Items);

end;

При нажатии кнопки Button2 в компонент ListBoxl заносятся параметры псевдонима, введенного в компонент Editl. Предыдущее содержимое компо­нента ListBoxl теряется.


Глава 13. Введение в работу с удаленными базами данных


373


Для добавления и удаления псевдонимов предназначены методы AddAiias и

DeleteAlias соответственно. Процедура AddAlias (const Name, Driver: String; List: TStrings) Добавляет НОВЫЙ ПСеВДОНИМ С именем Name. Параметр Driver

определяет драйвер нового псевдонима, а параметр List содержит список пара­метров псевдонима. Пример создания псевдонима для локальной БД:

procedure TForml.Button3Click(Sender: TObject);

begin

Sessionl.AddAlias(Editl.Text, 'STANDARD', Memol.Lines);

end;

В процедуре создается новый псевдоним, имя которого набрано в компоненте Editl. Псевдоним предназначен для работы с локальными БД dBase или Paradox, на что указывает тип standard псевдонима. Напомним, что локальные БД этих типов работают под управлением драйвера standard. Параметры псевдонима должны быть указаны в компоненте Memol. Необходимо указать хотя бы распо­ложение БД, например, введя в поле редактирования следующий текст:

PATH = d:\data

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

В качестве примера рассмотрим следующую процедуру:

procedure TForml.Button3Click(Sender: TObject);

var Params: TStringList;

begin

Params:= TStringList.Create;

try

Params.Add('SERVER NAME=d:\ibData\registration.gdb');

Params.Add('USER NAME=SYSDBA');

Params.Add('PASSWORD=masterkey');



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: