Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Kylix Tutorial. Часть 3. Работа с базами данных через dbExpress. Коннект - есть коннект.

Поиск:
Как говорилось раньше, SQLConnection предназначен для
1. Подключения к базе данных с заданными параметрами
2. Управления параметрами соединения и драйвера БД.
3. Получения списка установленных драйверов баз данных и доступных соединений
4. Создания, удаления, редактирования соединений.
5. Управление транзакциями
6. Выполнение SQL операторов
7. Получение метаданных

Подключения к базе данных
Подключение к базе данных осуществляется установкой св-ва Connected в True, либо вызвом метода Open. Отключение - установка Connected в False или вызов метода Close. Перед подключением необходимо установить имя соединения (св-во ConnectionName).
Пример установления соединения в run-time:

Код

 SQLConnection1.Connected:=false;
 SQLConnection1.ConnectionName:='test_connect';
 SQLConnection1.Connected:=true;


Управления параметрами соединения и драйвера БД.
Значения параметров по умолчанию для соединений хранятся в файле <домашняя директория пользователя>/.borland/dbxconnections или при отсутствии файлов по указанному пути в /usr/local/etc/dbxconnections.conf. Он представляет собой текстовый файл формата ini файлов. То есть содержит набор секций, заключенных в квадратные скобки и параметров в формате Имя параметра=значение параметра. Вот кускок этого файла:

Цитата
[DB2Connection]
DriverName=DB2
BlobSize=-1
Database=DBNAME


Для драйверов настройки по умолчанию хранятся по указанным выше путям в файле dbxdrivers
Для получения настроек, в принципе можно анализировать содержимое этих файлов, написав собственный код, однако гораздо удобнее пользоваться стандартными решениями. Свойство Params типа TStrings предоставляет нам доступ к параметрам соединения.

Пример - установка имени и пароля пользователя:
Код

SQLConection1.Params.Values['User_Name']:='SYSDBA';
SQLConection1.Params.Values['Password']:='masterkey';


Свойство LoadParamsOnConnect типа Boolean позволяет управлять автоматической установкой св-в DriverName и Params в значения по умолчанию для данного соединения перед установкой соединения. Данное св-во полезно лишь во время выполнения приложения при смене имени соединения. Во время разработки загрузка установка св-в по умолчанию происходит автоматически.


Получения списка установленных драйверов баз данных и доступных соединений
Способ №1
: анализировать содержимое файлов dbxconnections и dbxdrivers. Неудобно надо писать много собственного кода (который уже написан программистами Borland).

Способ №2. Использование функций из модуля SqlExpr
GetDriverNames(List: TStrings; DesignMode:Boolean = True) - получение списка доступных драйверов.
List - список для заполнения именами драйверов
DesignMode - в каком режиме разработки (true) или выполнения программы (false) вызывается функция.
Пример получение списка драйверов dbExpress:

Код

procedure TForm1.Button2Click(Sender:TObject);
begin
 // cb_drivers - это комбобокс для отображения списка драйверов
 GetDriverNames(cb_drivers.Items, false);
end;

procedure GetConnectionNames(List: TStrings; Driver:string = ''; DesignMode:Boolean = True);


Получение списка доступных соединений.
List - список для заполнения именами драйверов
Driver - имя драйвера, к которому подключаются соединения
DesignMode - в каком режиме разработки (true) или выполнения программы (false) вызывается функция.

Пример получение списка соединений доступных для INTERBASE:

Код

procedure TForm1.Button1Click(Sender:TObject);
begin
 // cb_conn - это комбобокс для отображения списка драйверов
 GetDriverNames(cb_conn.Items, 'INTERBASE', false);
end;


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

Способ №3 Использование интерфейса IConnectionAdmin (определен в модуле DBConnAdmin). Данный способ дает наиболее мощные возможности по работе с соединениями.
Пример получение списка драйверов:

Код

Var
 ConnAdm: IConnectionAdmin;
Begin
 // Получаем ссылку на интрефейс
 ConnAdm:=GetConnctionAdmin;
 ConnAdm. GetConnectionNames(cb_drivers);
End;


Методы интерфейса IConnectionAdmin;
Код

IConnectionAdmin = interface
   // Получение имен драйверов доступа к серверам БД
   function GetDriverNames(List: TStrings): Integer;
   // Получение параметров драйвера по умолчанию
   function GetDriverParams(const DriverName: string; Params: TStrings): Integer;
   // Получение имен файлов библиотек  
   procedure GetDriverLibNames(const DriverName: string;
     var LibraryName, VendorLibrary: string);
   // Получание списка соединений, доступных  для  заданного типа драйвера
   function GetConnectionNames(List: TStrings; DriverName: string): Integer;
  // Получение параметров соединения по умолчанию  
  function GetConnectionParams(const ConnectionName: string; Params: TStrings): Integer;
  // Получение значения параметра соединения
   procedure GetConnectionParamValues(const ParamName: string; Values: TStrings);
  // Добавление нового соединения
   procedure AddConnection(const ConnectionName, DriverName: string);
  // Удаление соединения
   procedure DeleteConnection(const ConnectionName: string);
  // Изменение параметров соединения по умолчанию
   procedure ModifyConnection(const ConnectionName: string; Params: TStrings);
  // Изменение имени соединения
   procedure RenameConnection(const OldName, NewName: string);
  //  Изменение параметров драйвера по умолчанию
   procedure ModifyDriverParams(const DriverName: string; Params: TStrings);
 end;


Создания, удаления, редактирования соединений.
Наверно, Вы уже догадались, что данные операции выполняются методами интерфейса IconnectionAdmin. Можно также и руками поправить файлы с конфигурациями, а можно двойным щелчком мыши на компоненте SQLConnection открыть диалог редактирования - выбирайте, что Вам удобнее.

Управление транзакциями
Вообще говоря, можно подтверждать или откатывать транзакции, передавая SQL запросы commit или rollback. Однако в SQLConnection определены специальные методы для управления транзакциями.
Начать новую транзакцию можно вызовом процедуры

Код

Procedure StartTransaction( TransDesc: TTransactionDesc);


В качестве параметра передается структура с описанием транзакции, поля структуры:
TransactionID: LongWord - уникальный (уникальность обеспечивает программист) идентификатор транзакции.
GlobalID:LongWord - как написано в доке, используется для транзакций в Oracle, зачем пока не ясно
IsolationLevel - уровень изоляции транзакции, значения
xilDIRTYREAD - "грязное" чтение, транзакция видит все изменения других транзакций, даже если они еще не подтверждены
xilREADCOMMITES - видны только результаты подтвержденных транзакций, но изменения, сделанные другими после старта транзакции (во время ее выполнения) не видны в транзакции.
xilREPEATABLEREAD - гарантируется состоятельность полученных данных, даже если другие транзакции подтверждаются после старта текущей транзакции.
XilCUSTOM - специфический для данного сервера БД уровень изоляции, значение уровня изоляции определяется членом структуры CustomIsolationLevel. На данный момент не поддерживается в dbExpress

CustomIsolationLevel:LongWord - см выше

Завершаться транзакции, как известно, могут либо подтверждением, либо откатом изменений.
Подтверждение
Код

Procedure Commit (TransDesc: TTransactionDesc);

TransDesc - структура с описанием подтверждаемой транзакции

Откат
Procedure Rollback (TransDesc: TTransactionDesc);
TransDesc - структура с описанием откатываемой транзакции

Другие методы и свойства, связанные с управлением транзакциями
TransactionLevel: SmallInt - идентификатор текущей транзакции, совпадает с TransactionID в описании транзакции
TransactionSupported : LongBool - поддерживает ли БД транзакции
InTransaction: Boolean - открыта ли транзакция?


Выполнение SQL операторов
В SQLConnection определены два метода для выполнения запросов к БД.

Код

Function Execute (const SQL: string; Params:TParams; ResultSet: Pointer = nil):integer;

Выполняет запрос определенный в параметре SQL c параметрами, переданными в Params. Если в результате запроса были получены записи, то в ResultSet возвращается указатель на TCustomSQLDataSet, содержащий полученные записи. Возвращает количество полученных записей.
Если запрос не содержит параметров и не возвращает записей проще использовать вызов

Код

Function ExecuteDirect(const SQL: string):LongWord;

Возвращает 0 при успешном завершении и код ошибки в случае неудачи.


Получение метаданных
В SQLConnection определен ряд методов для получения метаданных.

Получение списка таблиц и списка полей в таблице

Код

Procedure GetTableNames(List: TStrings; SystemTables: boolean = false);

Если установить SystemTables в True будут выбраны только системные таблицы, в обратном случае набор таблиц определяется установками св-ва TableScope.
ВНИМАНИЕ: я пробовал устанавливать в TableScope все элементы, но при этом не получал списка таблиц (должны выбираться и системные и обычные таблицы)- кривые руки? Скорее глюк. Может Вам повезет больше.
Список полей может быть получен вызвом метода GetFieldNames
В SQLConnection он определен как

Код

Procedure GetFieldNames(const TableName: string; List: TStrings);


Получение списка процедур и их параметров
GetProcedureNames и GetProcedureParams

Получение списка индексов
GetIndexNames
Автор: Mike Goblin






Просмотров: 1669

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную