уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Сегодня пришло письмо с лицензионными ключами для «CData Enterprise Connectors«. Надо сказать, что с FireDAC я особого знакомства не имел с самого момента его появления в Delphi XE4. Как-то так получилось, что знакомство с этой библиотекой у меня не заладилось с самого начала, так как до того момента я использовал LiteDAC и менять её на что-либо другое не планировал. А сегодня решил немного восполнить пробел, когда увидел список доступных по лицензии компонентов. Тем более, что буквально пару дней назад пришлось поработать с достаточно большим файлом CSV на 14 Мб с кодами ОКТМО из прошлой статьи. А здесь такая возможность — испытать в работе новые компоненты и решить свою локальную задачку по получению из файла CSV необходимых мне кодов.

Что за компоненты «CData Enterprise Connectors»?

На сколько я понимаю, компоненты от CData, так называемые, коннекторы позволяют получить унифицированный доступ к данным из различных приложений и источников данных, используя при этом язык запросов SQL. То есть, используя возможности этих компонентов, я могу работать, например, с файлом CSV как с обычной таблицей базы данных в FireDAC. Звучит вполне себе заманчиво, осталось только разобраться с тем, как это сделать.

Установка компонента CSV/TSV Files

На страничке загрузок выбираем необходимый компонент:

На следующем шаге просят ввести email и лицензионный ключ:

После ввода необходимых данных на компьютер загрузится zip-архив, содержащий установщик setup.exe нашего компонента.

Запускаем его и начинаем установку — вводим снова лицензионный ключ. При установке появится вот такое информационное сообщение:

То есть, лицензионный ключ введен корректный, но подписка не активирована. Жмем в этом окне «Ok» и нас перебрасывает на сайт CData где нам необходимо ввести необходимые данные для активации подписки (имя, адрес, email и т.д.). После того, как вы введете необходимые данные, необходимо снова вернуться в установщик и нажать «Next» и далее установка пройдет без проблем.

Новый компонент TFDPhysCDataCSVDriverLink будет появится на вкладке палитры компонентов «FireDAC Links»:

Теперь можно приступать к работе с CSV файлами с использованием FireDAC.

Приложение VCL для чтения CSV

На входе имеем файл Test.csv в кодировке UTF-8, содержащий информацию по кодам ОКТМО всей Российской Федерации. Скачать файл можно тут. Для начала научимся этот файл читать с использованием FireDAC.

Для работы нам понадобятся следующие компоненты:

  • TDBGrid, TDataSource — для показа данных из CSV
  • TFDConnection, TFDQuery — для работы с данными в CSV
  • TFDPhysCDataCSVDriverLink — для настройки подключения к CSV как к обычной таблице базы данных.

Бросаем эти компоненты на форму приложения:

Настраиваем компоненты следующим образом:

FDConnection1:

  • ConnectionName — пишем имя соединения, например «CSV Test»
  • DriverName — выбираем из списка значение «CDataCSV»
  • Params.DriverID — выбираем из списка значение «CDataCSV»

Остальные свойства можно пока оставить со значениями по умолчанию.

FDQuery1:

  • Connection — выбираем «FDConnection1»
  • ConnectionName — выбираем из списка значение «CSV Test» (имя нашего соединения)

DataSource1:

  • DataSet — выбираем значение «FDQuery1»

DBGrid1:

  • DataSource — выбираем значение «DataSource1»

Теперь бросаем рядом с exe-файлом нашего приложения CSV-файл (у нас это Test.csv) и в обработчике OnClick кнопки «Подключиться к CSV» пишем:

  FDConnection1.Connected:=True;
  FDQuery1.SQL.Text:='SELECT * FROM Test';
  FDQuery1.Active:=True

Теперь можно запустить приложение и проверить подключение:

Прочитать-то файл мы, конечно, прочитали, но на деле это оказался не такой уж и CSV, что характерно. В этом файле разделителем является не запятая (,), как то ожидается в случае CSV (comma-separated values), а точка с запятой (;). То есть, по факту, у нас оказался не CSV, а DSV (delimiter-separated values). Но это не критично, так как у FireDAC есть возможности обрабатывать и такие файлы тоже. Для этого необходимо немного разобраться со свойствами компонентов FireDAC и возможностями настройки подключений.

Параметры подключения TFDPhysCDataCSVDriverLink

Итак, после того, как мы бросили на форму компонент TFDPhysCDataCSVDriverLink, параметры подключения у TFDConnection изменились и появился целый список свойств (порядка 60 штук). Я перечислю только некоторые из них, которые пригодятся для подключения к локальным файлам CSV/TSV/DSV.

С одним из свойств (DriverID) мы уже ознакомились. Следующее важное для нас свойство — URI. Это свойство определяет путь к файлам CSV/TSV (или, как в нашем случая, к DSV). Так как мы подключаемся к локальным файлам, то в примере выше мы оставили это свойство пустым и программа искала файлы рядом с exe. Программно это свойство можно определить, например, так:

with FDConnection1.Params as TFDPhysCDataCSVConnectionDefParams do
   URI:=ExtractFilePath(Application.ExeName);

Или так:

with FDConnection1.Params as TFDPhysCDataCSVConnectionDefParams do
   URI:='c:\Temp';

Далее, в зависимости от того, с каким файлом (CSV или TSV) мы имеем дело, используя свойство FMT мы можем указать одно из значений:

  • FMTCsvDelimited — в качестве разделителя в файле используется запятая
  • FMTTabDelimited — в качестве разделителя используется табуляция

Свойство HDR в случае выбора его значения как HDRYes определяет, что именами столбцов в таблице будут значения из первой строки файла. В случае, если выбрано значение HDRNo, именами столбцов будут их порядковые номера.

Свойство IncludeFiles содержит список расширений файлов, разделенных запятыми, которые необходимо считать таблицами (по умолчанию файлы .txt, .tab и .csv)

Свойство RowScanDepth позволяет автоматически определять типы данных в столбцах путем сканирования строк таблицы до указанной глубины.

В принципе, этих свойств вполне достаточно, чтобы прочитать локальный файл CSV/TSV с использованием FireDAC максимально удобно для вас. Другой момент — что делать, если у вас окажется файл-DSV.

В этом случае, можно создать свой собственный файл схемы данных (Scheme.ini) и определить в нем необходимые свойства для успешного чтения таблицы.

Создание файла Scheme.ini для чтения CSV (DSV)

Файл Scheme.ini необходимо положить рядом с exe. Сам файл имеет достаточно простую структуру, например, рассмотрим вот файл с вот таким содержимым:

[Test.CSV] 
Format=Delimited(;) 
Col1=Ter integer
Col2=Kod1 integer
Col3=Kod2 integer
Col4=Kod3 integer
Col5=KC integer
Col6=Razdel integer
Col7=Name1 varchar
Col8=Centrum varchar
Col9=NomDescr varchar
Col10=NomAkt varchar
Col11=Status varchar
Col12=DateUtv date
Col13=DateVved date

В названии секции указывается имя файла для которого мы определяем схему. Далее, мы указываем формат файла. Format может содержать следующие значения:

  • CSVDelimited — канонический CSV в котором в качестве разделителя используются запятые
  • TabDelimited — файл TSV
  • Delimited(custom character) — DSV для которого в квадратных скобках указывается разделитель.

Мы воспользовались третьи значением и указали в качестве разделителя точку с запятой.

Далее в Scheme.ini можно указать типы данных для каждого столбца в формате:

Coln=Имя_столбца тип данных [Width Ширина столбца]

Нумерация столбцов начинается с единицы.

Подключение к Test.csv с использованием Scheme.ini

Создаем файл Scheme.ini так как показано выше (можно просто скопировать все значения и сохранить рядом с exe-файлом).

Теперь, если запустить приложение, то можно увидеть ровно то, что и ожидалось изначально — все данные из файла будут представлены в виде таблицы:

Теперь мы можем управлять данными в csv также, как и с данными таблица базы данных, например, выбрать только необходимые нам коды:

begin
  FDConnection1.Connected:=True;
  FDQuery1.SQL.Text:='SELECT * FROM Test where Ter=52';
  FDQuery1.Active:=True
end;

Результат:

Также можно вставлять, редактировать и удалять данные из файлов CSV/TSV/DSV. Но об этих операциях поговорим в следующих статьях, так как здесь придется более детально разобраться со схемами данных.

Первое впечатление от «CData Enterprise Connectors«

Несмотря на то, что мне ещё предстоит разобраться более детально с этими компонентами, могу сказать, что первое впечатление от их использования положительное. Да и сама идея унифицировать доступ к разнородным данным достаточно интересная. Конечно, хотелось бы видеть работу с DSV без дополнительных движений в сторону Schema.ini, но и так сойдет :)

5 1 голос
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
1 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
wolfstar
wolfstar
14/10/2020 23:04

по возможности, размещайте файлы на mega. Яндекс у нас заблочен