Russian Belarusian English German Japanese Ukrainian

Установление соединения с сервером

CuBook15

Для установления соединения с сервером базы данных служит компонент SQLConnection, который представляет собой аналог компонента DataBase в BDE.
Этот компонент взаимодействует с двумя файлами, расположенными в каталоге ..\Common Files\Borland Shared\DBExpress. Файл dbxdrivers.ini содержит список инсталлированных драйверов серверов БД и для каждого драйвера список динамически подключаемых библиотек и параметров соединений, установленных по умолчанию. Список соединений с параметрами соединений содержится в файле dbxconnections.ini. Для наглядности приведем фрагмент кода из этого файла:
[OrасleConnection]
DriverName=Orасle
DataBase=Database Name
User_Name=user
Password=password
RowsetSize=20
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
Oracle TransIsolation=ReadCommited
OS Authentication=False
Multiple Transaction=False
Trim Char=false
Поместив компонент SQLConnection в форму (или модуль данных) на этапе разработки приложения, можно выбрать одно из существующих соединений, либо создать новое соединение с помощью диалогового окна Редактора соединений. Вызов указанного окна можно выполнить выбором пункта Edit Connection Properties контекстного меню компонента.
 
Редактор соединений позволяет настроить существующее соединение dbExpress или создать новое соединение, а также проверить правильность настроек с помощью кнопки Test Connection. Параметры соединения также можно настраивать с помощью Инспектора объектов (свойство Params типа TStrings).
Параметры соединения для основных серверов баз данных приведены в таблице ниже.
Сервер БД Параметр Значение
Все серверы BlobSize Ограничение на объем пакета для данных типа BLOB
  DriverName Имя драйвера
  ErrorResourceFile Файл сообщений об ошибках
  LocaleCode Код локализации, определяющий влияние национальных символов на сортировку данных
  User_Name Имя пользователя
  Password Пароль
  <имя сервера БД> Translsolation Уровень изоляции транзакций для сервера с заданным именем
InterBase CommitRetain Поведение курсора по завершению транзакции: true - обновление; false - удаление
  RoleName Роль пользователя
  SQLDialect Используемый диалект SQL
  Trim Char Возможность удаления из строковых значений полей пробелов, дополняющих их до полной строки
  WaitOnLocks Разрешение на ожидание занятых ресурсов
  DataBase Имя файла базы данных (с расширением gdb)
DB2 DataBase Имя клиентского ядра
MySQL DataBase Имя базы данных
Microsoft SQL Server 2000
MySQL
Informix
HostName Имя компьютера, на котором установлен сервер
Microsoft SQL Server 2000
Informix
DataBase Псевдоним (алиас) имени базы данных
Microsoft SQL Server 2000
Oracle
OS Autenification Использование учетной записи текущего пользователя операционной системы при доступе к ресурсам сервера
Informix
Oracle
Trim Char Возможность удаления из строковых значений полей пробелов, дополняющих значение до полной строки
Oracle
AutoCommit Флаг завершения транзакции. Устанавливается сервером
  BlockingMode Режим завершения запроса, true - соединение дожидается окончания запроса; false - начинает выполнение следующего запроса
  Multiple Transaction Возможность управления несколькими транзакциями в одном сеансе
  DataBase Запись базы данных в файле TNSNames.ora
После описанной настройки параметров соединений для компонента SQLConnection с помощью Инспектора объектов можно выбрать соединение (свойство ConnectionName) для нужного сервера баз данных. При этом автоматически устанавливаются значения связанных с ним свойств:
  • DriverName (имя драйвера)
  • LibraryName (имя динамически подключаемой библиотеки Драйвера)
  • Params (параметры соединения)
  • VendorLib (имя динамически подключаемой библиотеки клиентской части сервера)
Открытие соединения с сервером БД осуществляется заданием свойству Connected типа bool значения true. Например, при выполнении приложения это можно сделать с помощью кода:
SQLConnection1->Connected = true;
Соответственно закрыть соединение с сервером можно путем задания этому свойству значения false. Названные операции могут быть выполнены также с помощью методов:
void __fastcall Open (void);
void __fastcall Close(void);
С помощью свойства LoginPrompt типа bool выполняется задание необходимости (true) или ненужности (false) отображения окна авторизации для ввода имени пользователя (User_Name) и пароля (Password) при каждой попытке соединения с сервером. В последнем случае эти значения будут браться из файла dbxconnections.ini.
 
После открытия соединения все компоненты dbExpress, инкапсулирующие наборы данных и связанные с открытым компонентом SQLConnection, получают доступ к базе данных.
При установлении соединения с сервером InterBase в качестве имени пользователя и пароля можно использовать строки Sysdba и masterkey.
При открытии и закрытии соединения можно воспользоваться любым из доступных событий, например:
__property Classes::TNotifyEvent AfterConnect = {read=FAfterConnect, write=FAfterConnect};
__property Classes::TNotifyEvent AfterDisconnect = {read=FAfterDisconnect, write=FAfterDisconnect};
__property Classes::TNotifyEvent BeforeConnect = {read=FBeforeConnect, write=FBeforeConnect};
__property Classes::TNotifyEvent BeforeDisconnect = {read=FBeforeDisconnect, write =FBeforeDisconnect};
property OnLogin: TSQLConnectionLoginEvent;
Например, событие BeforeConnect можно использовать для вызова функции, выполняющей дешифрование пароля доступа к базе данных. Соответствующий обработчик события может быть задан следующим образом:
void __fastcall TForm1::SQLConnectionBeforeConnect(TObject *Sender)
{
if (SQLConnection1->LoginPrompt == false)
{
SQLConnection1->Params->Values["User_Name"] = "SYSDBA";
SQLConnection1->Params->Values["Password"] = Decrypt(SQLConnection1->Params->Values["Password"]);
}
Событие OnLogin наступает в случае, если свойству LoginPrompt установлено значение true. Если это свойство имеет значение true, и нет обработки события OnLogin, то пользователю будет предложен стандартный диалог авторизации. Узнать о текущем состоянии соединения позволяет свойство:
__property TConnectionState ConnectionState = {read=FConnectionState, write=FConnectionState};
тип которого описан так:
enum TConnectionState {csStateClosed, csStateOpen, csStateConnecting, csStateExecuting, csStatePetching, csStateDisconnecting};
Указанные в определении типа значения соответствуют следующим состояниям соединения:
  • csStateClosed - закрыто
  • csStateOpen - открыто
  • csstateConnecting - установление соединения
  • csStateExecuting - ожидание исполнения переданного SQL-запроса
  • csstateFetching - получение данных с сервера
  • csStateDisconnecting - завершение соединения
Компонент SQLConnection позволяет выполнять SQL-запросы с помощью следующей функции:
int __fastcall Execute (const AnsiString SQL, TParams Params, void *Resuitset = NULL);
выполняет запрос, определенный значением константы SQL, с параметрами Params, используемыми в SQL-запросе. Используемые в запросе параметры должны иметь тот же порядок следования, что в params и в инструкции SQL. Если SQL-запрос не содержит параметров, то свойству Params требуется задать значение NULL. Если при выполнении SQL-запроса возвращается результат, то в параметр ResultSet помещается указатель на объект типа TCustomSQLDataSet, содержащий результат.
 
При отсутствии в запросе параметров и возвращения записей рекомендуется использовать функцию:
int __fastcall Execute (const AnsiString SQL, void *Resuitset);
которая возвращает значение о при успешном завершении запроса или код ошибки в противном случае.
 
Подобно своим аналогам в BDE компонент SQLConnection позволяет выполнять запуск, фиксацию и откат транзакций соответственно с Помощью методов: StartTransaction, Commit и Rollback.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий