2. EMBARCADERO TECHNOLOGIES
Короткий план
• Почему появился FireDAC (требования, история)
• Обзор архитектуры (введение)
• Основные возможности FireDAC
• Дорожная карта
• Вопросы
3. EMBARCADERO TECHNOLOGIES
Почему FireDAC ?
Клиент с 10**6 строками кода, использующими BDE,
искал продукт для миграции с BDE. Требования:
• Надежный. Как BDE.
• Быстрый. Быстрее чем BDE.
• Унифицированный. Поддержка многих СУБД.
• Совместимый. С BDE и возможно ADO (dbGO).
• Качественная поддержка.
• Все исходные тексты.
4. EMBARCADERO TECHNOLOGIES
Вехи AnyDAC / FireDAC
• Февраль, 2003 – DENT v 0.1 с Oracle, MySQL и dbExpress
драйверами
• Декабрь, 2004 – DENT v 0.6 с новыми SQL Server, DB2, SQL
Anywhere, MS Access и ODBC драйверами
• Апрель, 2005 – FreeDAC v 1.0 как freeware
• Ноябрь, 2008 – AnyDAC v 2.0.7 с новыми PostgreSQL и SQLite
драйверами
• Сентябрь, 2011 – AnyDAC v 5.0.3 с новым Advantage
драйвером, поддержка x64 и Mac OS X
• Август, 2012 – AnyDAC v 6.0.1 с LocalSQL
• Январь, 2013 – Embarcadero FireDAC v 7.0.1
• Май, 2013 – Embarcadero FireDAC v 8.0.1, поддержка iOS
6. EMBARCADERO TECHNOLOGIES
Основные компоненты FireDAC
• TADConnection – управляет соединением с БД.
• TADTransaction – управляет транзакциями в соединении.
• TADMemTable – набор данных в памяти.
• TADQuery – исполняет SQL команды и возвращает наборы
данных.
• TADStoredProc – исполняет хранимые процедуры.
• TADTable – открывает данные таблицы и обеспечивает работу с
ними.
• TADScript – выполняет SQL скрипты.
• TADMetaInfoQuery – предоставляет доступ к мета данным.
• TADEventAlerter – обработка событий БД на стороне клиента.
• TADLocalSQL – исполняет SQL команды над наборами данных.
7. EMBARCADERO TECHNOLOGIES
GUIx компоненты FireDAC
• Диалог обработки ошибок БД
• Диалог регистрации
• Курсор ожидания и т.д.
• 3 реализации – FireMonkey, VCL, консоль
8. EMBARCADERO TECHNOLOGIES
Основные драйвера FireDAC
• Advantage Database
• Sybase SQL Anywhere
• IBM DB2
• Interbase
• Firebird
• MS Access
• MS SQL Server и SQL Azure
• MySQL
• Oracle
• PostgreSQL
• SQLite and BerkeleyDB
10. EMBARCADERO TECHNOLOGIES
Дополнительные драйвера FireDAC
• TADPhysODBCDriverLink – источники данных ODBC
• TADPhysTDBXDriverLink - источники данных
dbExpress
• Informix, Sybase Adaptive Server, SQLBase, и т.д.
• И даже файлы данных COBOL
11. EMBARCADERO TECHNOLOGIES
Миграция с BDE
• Высокая совместимость между BDE и FireDAC:
– по свойствам
– по методам
– по поведению
• Полуавтоматическая, документированная
процедура миграции
• Приложение со 100 модулями данных может быть
переведено на FireDAC за одну недели
12. EMBARCADERO TECHNOLOGIES
Отчет об окружении FireDAC
• Предоставляет детальный отчет об соединении
• Может быть получен на этапе разработки в редакторе ADConnection
• … исполнения: ADConnection1.GetInfoReport(Memo1.Lines, [riConnDef ..
riKeepConnected]);
13. EMBARCADERO TECHNOLOGIES
Определение соединения FireDAC
var
oParams: TStrings;
begin
oParams := TStringList.Create;
oParams.Add('Database=ORA_920_APP');
oParams.Add('User_Name=ADDemo');
oParams.Add('Password=a');
ADManager.AddConnectionDef('Oracle_Conn', 'Ora', oParams);
.....................
ADConnection1.ConnectionDefName := 'Oracle_Conn';
ADConnection1.Connected := True;
• Набор параметров соединения. Аналог алиасов BDE и ADO UDL
• Постоянные определения – хранятся в ADConnectionDefs.ini,
управляются ADExplorer
• Приватные определения – хранятся в приложении, управляются
прикладным кодом
• Временные определения – хранятся в ADConnection.Params,
управляются редактором ADConnection
14. EMBARCADERO TECHNOLOGIES
Система опций FireDAC
Свыше 60 опций:
• FetchOptions – управляют выборкой записей
• FormatOptions – управляют обработкой типов данных
• ResourceOptions – управляют использованием
ресурсов, персистентностью и другими аспектами
• UpdateOptions – управляют редактированием данных
и отправкой измененных данных в БД
• Значения опций наследуются наборами данных от
соединения. Установлено у ADConnection –
используются ADQuery
• Значения по умолчанию подходят для большинства
случаев
15. EMBARCADERO TECHNOLOGIES
Мапирование типов данных в FireDAC
with ADConnection1.FormatOptions do begin
OwnMapRules := True;
with MapRules.Add do begin
SourceDataType := dtFmtBCD;
PrecMin := 10;
PrecMax := 10;
ScaleMin := 0;
ScaleMax := 0;
TargetDataType := dtInt32;
end;
end;
• Oracle: NUMBER(10,0) -> ftFMTBcd
SQL Server: INT -> ftInteger
• Позволяет создать схему типов данных для:
– унификации типов для разных СУБД
– оптимизации использования памяти
– упрощения миграции
16. EMBARCADERO TECHNOLOGIES
Пакетная выборка записей в FireDAC
• Выбирается несколько записей одним пакетом за
одно сетевое обращение
• Чем медленнее сеть, тем заметнее эффект
• Управляется FetchOptions.RowsetSize
• 100K записей:
– RowsetSize = 1 -> 7,5 сек
– RowsetSize = 100 -> 0.65 сек
17. EMBARCADERO TECHNOLOGIES
Пакетное исполнение SQL команд в FireDAC
• SQL команды отосланные СУБД за раз,
компилируются и обрабатываются все вместе
• Чем медленнее сеть или слабее сервер, тем заметнее
эффект
• ADDataSet.NextRecordSet метод для обработки
результирующих наборов данных одного за другим
• Свойство ADDataSet.Data для присвоения набора
данных ADMemTable и одновременного их
использования
• Следующие 2 слайда – оба способа …
18. EMBARCADERO TECHNOLOGIES
Метод NextRecordSet в FireDAC
ADQuery1.SQL.Add('select * from [Region]');
ADQuery1.SQL.Add('select * from [Territories]');
ADQuery1.Open; // Записи [Region] доступны
ADQuery1.NextRecordSet; // Записи [Territories] доступны
• Последовательная (один за другим) обработка
множественных наборов данных
19. EMBARCADERO TECHNOLOGIES
Свойство Data в FireDAC
ADQuery1.SQL.Text := 'select * from [Region]; select * from [Territories]';
ADQuery1.Open;
ADQuery1.FetchAll;
// присвоить ADMemTable1 записи Region
ADMemTable1.Data := ADQuery1.Data;
ADQuery1.NextRecordSet;
ADQuery1.FetchAll;
// присвоить ADMemTable2 записи Territories
ADMemTable2.Data := ADQuery1.Data;
• Свойство Data позволяет присвоить содержимое
набора данных ADMemTable
• Каждый набор данных хранится в выделенном
ADMemTable
• Все наборы данных доступны одновременно
20. EMBARCADERO TECHNOLOGIES
ArrayDML в FireDAC
• Исполняет N INSERT / UPDATE / DELETE
параметризованных команд за один вызов
• Универсально, просто и эффективно
• Каждый параметр хранит массив значений, ATimes
параметр метода Execute = размеру массива
• Чем медленнее сеть или слабее сервер, тем заметнее
эффект
• INSERT для 10K записей:
– Array DML -> 0,03 сек
– Normal ExecSQL -> 5,50 сек
• Следующий слайд – код …
21. EMBARCADERO TECHNOLOGIES
ArrayDML пример в FireDAC
var
i: Integer;
begin
ADQuery1.SQL.Text := 'insert into {id ADQA_TransTable} values (:p1, :p2)';
ADQuery1.Params.ArraySize := 10000;
for i := 1 to 10000 do begin
ADQuery1.Params[0].AsIntegers[i - 1] := i;
ADQuery1.Params[1].AsStrings[i - 1] := 'Str' + IntToStr(i);
end;
ADQuery1.Execute(10000, 0);
end;
• TADParam имеет свойства AsXxxx[Aindex]
• Params.ArraySize задает размер массива
• TADQuery.Execute(ATimes, AOffset) выполняет массив
22. EMBARCADERO TECHNOLOGIES
Асинхронное исполнение в FireDAC
• Долго выполняемые операции можно исполнять
асинхронно или с таймаутом
• ResourceOptions.CmdExecMode – 4 режима
исполнения
• TADGUIxAsyncExecuteDialog, CmdExecMode =
amCancelDialog – диалог асинхронного исполнения
• ResourceOptions.CmdExecTimeout – таймаут
исполнения
• ADDataSet.AbortJob – отмена исполнения
23. EMBARCADERO TECHNOLOGIES
SQL препроцессор в FireDAC
• Эскейп функции – одно выражение для любой СУБД:
select {left({ucase(RegionDescription)}, 3)}, RegionDescription
from {id Region}
• Условные операции – позволяют писать SQL части
различно для конкретных СУБД:
{IF Oracle} SELECT * FROM “Region” {fi}
{IF MSSQL} SELECT * FROM [Territories] {fi}
• Макросы – подстановочные переменные
расширяющие применение параметров:
ADQuery1.SQL.Text := 'select * from &TabName';
ADQuery1.MacroByName('TabName').AsIdentifier := Edit1.Text;
ADQuery1.Open;
• Параметры – корректное распознавание конструкций
PostgreSQL ::, Oracle :=, метки MSSQL labels, и т.д.
24. EMBARCADERO TECHNOLOGIES
Пример макросов в FireDAC
select *
from {id Employees}
{IF !FirstName !LastName !Title}
where 1=1
{IF !FirstName} and ({ucase(FirstName)} like {ucase('%!FirstName%')}) {FI}
{IF !LastName} and ({ucase(LastName)} like {ucase('%!LastName%')}) {FI}
{IF !Title} and ({ucase(Title)} like {ucase('%!Title%')}) {FI}
{FI}
ADQuery1.MacroByName('FirstName').AsRaw := edtFirstName.Text;
ADQuery1.MacroByName('LastName').AsRaw := edtLastName.Text;
ADQuery1.MacroByName('Title').AsRaw := edtTitle.Text;
• Простые, структурированные и читаемые SQL
команды
• Универсальный, эффективный способ строить
динамические SQL команды
25. EMBARCADERO TECHNOLOGIES
SQL скрипты в FireDAC
SET TERM ;
SET SQL DIALECT 3;
SET NAMES UTF8;
SET CLIENTLIB ‘D:IBfb25binfbclient.dll';
CREATE DATABASE ‘D:IBTestDD2011.fb'
USER 'sysdba' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET NONE;
SET TERM ^ ;
CREATE PROCEDURE MY_PROC RETURNS (aParam INTEGER) AS
BEGIN
aParam = 10;
END^
• TADScript позволяет включить функционал административных утилит в приложение
• Позволяет расширять пользовательскими командами набор встроенных команд
• Поддерживает SQL*Plus, MS ISQL, mysqldump, IB ISQL диалекты
26. EMBARCADERO TECHNOLOGIES
Автоматическое редактирование в FireDAC
• Не требуется указание SQL команд для
редактирования данных. Они генерируются
автоматически для целевой СУБД.
• Генератор SQL команд знает различные SQL диалекты
и возможности СУБД
• Есть TADUpdateSQL. Его использование опционально.
• Oracle:
INSERT INTO OracleTab (NAME, DT, IMAGE)
VALUES (:NEW_NAME, :NEW_DT, EMPTY_BLOB())
RETURNING :NEW_ID, :NEW_IMAGE
• SQL Server:
INSERT INTO SQLTab (NAME, DT, IMAGE)
VALUES (:NEW_NAME, :NEW_DT, :NEW_IMAGE);
SELECT SCOPE_IDENTITY() AS ID
27. EMBARCADERO TECHNOLOGIES
Авто-инкрементальные поля в FireDAC
• Распознаются IDENTITY и подобные колонки
• Распознаются колонки заполняемые в BEFORE
INSERT триггере значением из генератора в
InterBase и Firebird
• Датасет автоматически перечитывает значение из
новой вставленной записи
• Работает как для обычных, так и для
кэшированных обновлений
28. EMBARCADERO TECHNOLOGIES
А так же …
• Мощные датасеты с сортировкой, фильтрацией, поиском, агрегацией,
персистентностью, кэшированием изменений и т.д.
• Связь мастер-деталь, с поддержкой каскадного обновления и кэшированных
изменений
• TADTable и Live Data Window режим
• ADMemTable аналогичный TClientDataSet, быстрый и гибкий
• Локальный SQL, использующий датасеты как источники данных
• Офлайновый и онлайновый режимы работы соединения
• Автоматическое восстановление соединения
• Пулинг соединений
• Поддержка множественных и вложенных транзакций
• Поддержка Unicode
• Развитая обработка ошибок
• Поддержка событий СУБД
• Поддержка резервного копирования, восстановления, проверки и
исправления БД
• Развитое предоставление метаданных
• Трассировка вызовов и ADMonitor
29. EMBARCADERO TECHNOLOGIES
Дорожная карта FireDAC
• Улучшенная поддержка InterBase, включая
шифрование, новые сервисные компоненты и т.д.
• Поддержка Android.
• Полная интеграция в IDE.
• Упрощение миграции с BDE и ADO.
• Дальнейшее развитие DataSnap драйвера.
• Новые драйвера, включая поддержку прямого
“общения” через сетевой протокол СУБД.
• Поддержка новых версий СУБД.