FireDAC. Добавление 1000 записей в отдельном потоке

В данной статье попрактикуемся работать c потоками в технологии FireDAC. В переводе документации мы уже познакомились с теорией, здесь же будет небольшой практический пример. Используем также, технику ArrayDML, позволяющую создать большое число записей с минимальными затратами, описанную ранее. Вот что у нас получится.

Если кратко, в документации советуется создавать FDConnection и, например FDQuery или любой другой компонент, внутри потока для каждого Dataset или для каждой отдельной операции с данными, насколько я понял – вставки, запросов, обновления и так далее.

В данном примере будем создавать в отдельном потоке FDConnection и FDQuery для вставки 1000 записей. Цель – научиться и закрепить навыки.

19

20

 

Начали!

Создадим VCL приложение и добавим 1 кнопку и 1 Label

21

Создадим отдельный DataModule и добавим на него следующие компоненты.

22

 

Создадим модуль с потоком File > New > Other >

23

При создании модуля потока Delphi запросила у меня название класса, я ввел TArrayDMLThread

24

Сохраним все наши файлы и проект в любой удобной папке.


Файл FDDrivers.ini

Скомпилируем и запустим нашу программу, чтобы получить EXE. Далее, как и всегда – положим FDDrivers.ini с EXE файлом нашей программы.

25В нём пропишем следующее

26

 


DataModule

ArrayDMLThreadUnit

Здесь и будет самая основная магия – всё будет создаваться динамически, внутри потока! Единственное, что выходит за пределы потока – это отображение на Label главной формы записи о том, что результат успешный.


MainUnit

Здесь всего одна самая интересная процедура – запуск потока по клику!!!

Тестируем!

Для теста можно взять и побольше записей, скажем 100 000, посмотрим как отработает программа и проверим как добавились записи с помощью другого инструмента, например WorkBench!

28

 

Пока добавлялись записи я двигал мышкой окно, сворачивал, разворачивал его – всё работало как будто бы потока по добавлению записей и не было, но вот если посмотреть в WorkBench!

29

 

То процесс в самом разгаре!!!

20