Как подключиться к базе данных JSON из кода приложения

15.12.2019

Большинство отчетов выводят какие-либо данные. Как правило, эти данные получают из баз данных. Поэтому отчет имеет подключение к источнику данных, для того чтобы иметь список доступных таблиц и полей, а также сами данные. Но что, если на момент создания отчета в вашем распоряжении была лишь локальная база данных, к которой вы и создали подключение внутри отчета. Тогда на бою отчет работать не будет. Нужен валидный коннекшен. Выходов из этой ситуации может быть два: использовать источник данных из пользовательской программы, либо подменять строку подключения в отчете.

Первый способ хорошо вам известен. Нужно создать подключение в приложении, а затем зарегистрировать его в отчете. Тогда, при конструировании отчета вы можете выбрать этот источник по алиасу. С одной стороны, это удобно – изменение подключения в программе не отразится на отчете. Отчету все равно откуда берутся данные, лишь бы имена таблиц и полей, типы данных соответствовали заданным в шаблоне. Минус этого подхода – невозможно конструировать отчет без пользовательского приложения. Ведь подключение только в нем. Разработчик отчетов может и не иметь никакого пользовательского приложения с подключением. В этом случае ему подойдет именно внутреннее подключение к данным в отчете.

Поэтому давайте рассмотрим, как можно легко подменить подключение для уже готового отчета с внутренним подключением. Конечно, подключение должно происходить к так же базе данных, как и в отчете. Просто задаем ее другое расположение.

Для этого, приложении вам потребуется добавить ссылки на библиотеки: FastReport.dll и FastReport.JsonDataConnection.dll. В каталоге установки FastReport.net есть папка Extras\Connections\FastReport.Json. нужно собрать этот проект. В итоге вы и получите нужные библиотеки. Добавляем их в ссылки проекта. А далее код подмены коннекшена:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using FastReport;
using FastReport.Utils;
using FastReport.Data;
 private void Button1_Click(object sender, EventArgs e)
 {
 RegisteredObjects.AddConnection(typeof(JsonDataConnection));
 Report report = new Report(); 
 
 JsonDataConnection connection = new JsonDataConnection();
 connection.ConnectionString = "Json=../../App_Data/nwind.json";
 connection.CreateAllTables();
 report.Dictionary.Connections.Add(connection);
 report.RegisterData(connection.DataSet);
 report.Load("../../App_Data/json.frx");
 report.Prepare();
 report.Show();
 }

 В начале мы регистрируем объект подключения к базе данных Json. Затем создаем экземпляр объекта отчета. Создаем экземпляр объекта json коннекшена. Задаем его свойство ConnectionString – по сути просто ссылка на файл. В нашем случаем файл расположен в папке App_Data в проекте. Функция CreateAllTables подгружает все таблицы из источника.

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

Важно, именно сейчас загрузить шаблон отчета. Если сделать перед добавлением подключения в коллекцию подключений отчета, то трюк с подменой не получится. После загрузки шаблона подготавливаем отчет к показу и показываем.

В результате мы имеем построенный отчет, источник данных которого был изначально настроен на другую строку подключения. Таким образом мы можем подменить строку подключения в любом отчете, не заботясь о расположении баз данных по указанным в отчетах путям.

1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.
28 октября 2024

Как настроить WSL 2 для работы с FastReport и FastCube

В этой статье попробуем вместе разобраться, как настроить WSL 2 для работы с компонентами FastReport и FastCube в Lazarus для Linux.