Как использовать SQL функции в FastReport .NET

14.08.2018

Для получения данных в MS SQL можно использовать sql запросы, хранимые процедуры и хранимые функции. Ранее мы уже рассмотрели, как использовать динамические запросы и хранимые процедуры в качестве источника данных отчета. В этой статье мы создадим табличную и скалярную функцию и используем их в отчете.

Напомню, табличные функции возвращают таблицы, а скалярные функции возвращают одиночные значения.

Создадим табличную функцию в MS SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
USE [testdb]
GO
 
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================
-- Description: Returns customers who live in the specified city
-- =============================================
 
CREATE FUNCTION [dbo].[GetCustomersFromCity]
(
 @city VARCHAR(20)
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM dbo.CUSTOMER WHERE CITY = @city
)

Функция принимает один параметр – название города, а возвращает список клиентов в этом городе.

Давайте сразу добавим еще одну, теперь скалярную функцию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
USE [testdb]
GO
 
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================
-- Description: Returns last added customer
-- =============================================
CREATE FUNCTION [dbo].[GetLastCustomer]
()
RETURNS VARCHAR(30)
AS
BEGIN
 DECLARE @Name VARCHAR(30)
 SELECT TOP 1 @Name = CONCAT(ind.FIRST_NAME, ' ', ind.LAST_NAME) FROM dbo.Customer cus
 JOIN dbo.Individual ind ON ind.CUST_ID = cus.CUST_ID
 ORDER BY cus.CUST_ID
 RETURN @Name
END

Эта функция не принимает параметров, а возвращает ФИО последнего зарегистрированного клиента.

Теперь перейдем к отчету.

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

 

Добавим подключение к базе данных MS SQL:

 

Далее, на следующем шаге нам предлагается выбрать таблицы, но мы воспользуемся кнопкой Add SQL query…

 

На следующем шаге задаем имя новой таблицы – TableFunction. Нажимаем Next.

 

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

 

На следующем шаге нам нужно добавить параметр запроса city. В его свойстве Expression выбираем параметр отчета Param. Переходим далее и нажимаем Finish.

И получаем новый источник данных:

 

Теперь добавим диалоговую форму и перетащим на нее параметр отчета – Param.

Перетаскиваем поля из таблицы TableFunction на бэнд Данные.

Запустим отчет. Вводим значение в диалоговой форме:

 

И получаем выборку из табличной функции:

Вы не забыли, в начале статьи мы создали две функции? Этот пример еще проще, потому что я не добавил входящий параметр в эту функцию. Создадим еще один источник данных. Также, как и в первый раз – подключение к MS SQL. И опять нажимаем кнопку Add SQL query…

Вызов скалярной функции немного отличается от вызова табличной функции:

Пропускаем все остальные шаги.

 

Добавим еще одну страницу отчета и перетаскиваем на бэнд данные единственное поле из нового источника данных – ScalarFunc.

Запустим отчет. Переходим на вторую страницу:

 

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

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

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

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

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

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