В данной статье рассказывается об
управлении соединением с базой при
данных помощи компоненты TDataBase и
объекта TSession, который создается в
программе автоматически.
Описываются процедуры создания
локального псевдонима базы данных
и доступа к таблицам Paradox по паролю.
Класс TDataBase
Объект типа TDataBase не является
обязательным при работе с базами
данных, однако он предоставляет ряд
дополнительных возможностей по
управлению соединением с базой
данных. TDataBase служит для:
Создания постоянного
соединения с базой данных
Определения собственного
диалога при соединении с базой
данных (опрос пароля)
Создания локального
псевдонима базы данных
Изменения параметров при
соединении
Управления транзакциями
TDataBase является невидимым во время
выполнения объектом. Он находится
на странице Data Access Палитры
Компонент. Для включения в проект
TDataBase нужно положить его на
главное окно вашей программы.
Создание постоянного соединения с базой данных
Если вы работаете с базой данных,
то перед началом работы
выполняется процедура соединения с
этой базой. В процедуру соединения,
кроме прочего, входит опрос имени и
пароля пользователя (кроме случая
работы с локальными таблицами Paradox
и dBase через IDAPI). Если в программе не
используется TDataBase, то процедура
соединения выполняется при
открытии первой таблицы из базы
данных. Соединение с базой данных
обрывается, когда в программе
закрывается последняя таблицы из
этой базы (это происходит в том
случае, если свойство KeepConnections
объекта Session установлено в False, но об
этом чуть позже). Теперь, если снова
открыть таблицу, то процедура
установки соединения повторится и
это может быть достаточно неудобно
для пользователя. Чтобы соединение
не обрывалось даже в том случае,
когда нет открытых таблиц данной
базы, можно использовать компонент
типа TDataBase. В свойстве AliasName укажите
псевдоним базы данных, с которой
работает программа; в свойстве
DatabaseName - любое имя (псевдоним БД), на
которое будут ссылаться таблицы
вместо старого псевдонима базы.
Свойство Connected установите в True -
процедура соединения с базой будет
выполняться при запуске программы.
И, наконец, свойство KeepConnection нужно
установить в True (см. рис.1).
Рис.A: Свойства TDataBase в Инспекторе объектов
В нашем примере, после задания
свойств DataBase1 нужно у всех таблиц,
работающих с IBLOCAL в свойстве DatabaseName
поставить Loc_IBLOCAL.
Определение собственного диалога при соединении с базой данных
По умолчанию при соединении с
базой данных используется диалог
опроса имени и пароля пользователя,
показанный на рис.2
Рис.B: Диалог авторизации
пользователя
При желании можно изменить
внешний вид диалога или вообще его
отменить. Для этого используются
свойства и события класса TDataBase -
LoginPrompt, Params и OnLogin.
Чтобы отключить опрос имени и
пароля установите свойство LoginPrompt в
False. При этом в свойстве Params
требуется в явном виде (во время
дизайна либо во время выполнения)
указать имя и пароль пользователя.
Например, в программе можно
написать (до момента соединения с
базой, например в событии для Form1
OnCreate) :
DataBase1.LoginPrompt:=False;
DataBase1.Params.Clear;
DataBase1.Params.Add(‘USER NAME=SYSDBA’);
DataBase1.Params.Add(‘PASSWORD=masterkey’);
DataBase1.Connected:=True;
Чтобы использовать свой
собственный диалог, в котором можно
опрашивать не только имя и пароль
пользователя, но и, например,
сетевой протокол - создайте
обработчик события OnLogin для DataBase1:
procedure TForm1.Database1Login(Database: TDatabase;
LoginParams: TStrings);
begin
Form2.ShowModal;
if Form2.ModalResult = mrOK then
with LoginParams do begin
Values['USER NAME'] := User_Name;
Values['PASSWORD'] := User_Pass;
end;
end;
Здесь Form2 - новое окно-диалог для
ввода имени и пароля, User_Name и User_Pass -
строки, куда сохраняются введенные
имя и пароль.
Создание локального псевдонима базы данных
Обычно, псевдоним базы данных(Alias)
определяется в утилите
конфигурации BDE и информация о нем
сохраняется в файле конфигурации
IDAPI.CFG. Однако, в программе можно
использовать не только ранее
определенный в утилите
конфигурации BDE псевдоним базы
данных, но и так называемый
локальный (т.е. видимый только
внутри данной программы) псевдоним.
Это иногда бывает нужно, например,
для того, чтобы обезопасить
программу в случае удаления
используемого псевдонима из файла
конфигурации BDE.
Для того, чтобы создать локальный
псевдоним БД, положите на главное
окно проекта компонент DataBase1.
Дальнейшие действия можно
выполнить с помощью Инспектора
Объектов, но удобнее это сделать
через редактор компонент. Щелкните
дважды мышкой на DataBase1 - появится
диалог, показанный на рис.3
Рис.C: Редактор компоненты класса TDataBase
В этом диалоге требуется указать
имя базы данных - это будет ее
локальный псевдоним, на который
ссылаются таблицы (свойство
DatabaseName); тип драйвера (в нашем
примере это INTRBASE); а также
параметры, используемые при
соединении с базой данных. Получить
список параметров в поле Parameter
Overrides можно по нажатию кнопки
Defaults. Набор параметров зависит
от типа БД, с которой вы работаете.
Этим параметрам нужно присвоить
требуемые значения - указать путь к
серверу, имя пользователя и т.д.
После выхода из редактора
компонент имя, указанное в поле
Name появится в списке имен баз
данных для компонент типа TDataSet (TTable,
TQuery etc.).
Изменение параметров при соединении
Иногда требуется изменить
определенные в утилите
конфигурации BDE параметры,
используемые при установлении
соединения с БД. Это можно сделать
во время дизайна с помощью диалога,
показанного на рис.3, в поле Parameter
Overrides. Либо во время выполнения
программы (до попытки соединения)
прямым присвоением свойству Params
объекта DataBase1:
DataBase1.Params.Add(‘LANGDRIVER=ancyrr’);
Управление транзакциями
TDataBase позволяет начать в БД
транзакцию (метод StartTransaction),
закончить (Commit) или откатить ее
(RollBack). Кроме того, можно изменять
уровень изоляции транзакций
(свойство TransIsoltion).
TransIsolation Oracle Sybase and Informix InterBase
Microsoft SQL
Dirty read Read committed Read committed Dirty Read Read
committed
Read committed(Default) Read committed Read committed Read
committed Read committed
Repeatable read Repeatable read Read committed Repeatable Read
Repeatable Read
Dirty Read - внутри вашей текущей
транзакции видны все изменения,
сделанные другими транзакциями,
даже если они еще не завершились по
Commit. Read Committed - видны только
закоммитченные изменения,
внесенные в базу. Repeatable Read -
внутри транзакции видны те данные,
что были в базе на момент начала
транзакции, даже если там на самом
деле уже имеются изменения.
Объект Session
Объект Session, имеющий тип TSession
создается автоматически в
программе, работающей с базами
данных (в этом случае Delphi
подключает в программу модуль DB).
Вам не нужно заботиться о создании
и уничтожении данного объекта, но
его методы и свойства могут быть
полезны в некоторых случаях. В этом
компоненте содержится информация
обо всех базах данных, с которыми
работает программа. Ее можно найти
в свойстве DataBases. Со свойством
KeepConnections данного объекта мы уже
знакомы. Это свойство определяет,
нужно ли сохранять соединение с
базой, если в программе нет ни одной
открытой таблицы из этой базы. NetDir -
директория, в которой лежит общий
сетевой файл PDOXUSRS.NET, необходимый BDE.
PrivateDir - директория для хранения
временных файлов.
С помощью методов объекта Session
можно получить информацию о
настройках BDE, например, список всех
псевдонимов, драйверов баз данных
или список всех таблиц в базе.
Еще одно важное назначение
объекта Session - доступ с его помощью к
таблицам Paradox, защищенным паролем.
Прежде, чем открыть такую таблицу,
требуется выполнить метод AddPassword :
Session.AddPassword(‘my_pass’);
Удалить пароль можно с помощью
метода RemovePassword или RemoveAllPasswords.
Указание сетевого протокола при соединении с БД
В случае с InterBase можно в явном виде
указать, какой сетевой протокол
используется при соединении с
базой данных. Эта установка
выполняется либо в утилите
конфигурации BDE, либо в программе -
нужно изменить параметр SERVER NAME,
который содержит полный путь к
файлу с базой данных.
Итак:
Протокол Параметр SERVER NAME
TCP/IP IB_SERVER:PATH\DATABASE.GDB ( nt:c:\ib\base.gdb ) (
unix:/ib/base.gdb )
IPX/SPX IB_SERVER:PATH\DATABASE.GDB ( nw@sys:ib\base.gdb )
NetBEUI \\IB_SERVER\PATH\DATABASE.GDB ( \\nt\c:\ib\base.gdb )
[ Предыдущий урок | Содержание | Следующий урок ]
|