Параметризованные запросы Crystal Reports - PullRequest
0 голосов
/ 28 января 2010

Компания, в которой я работаю, использует MacolaES для ERP-системы. База данных SQL Server структурирована таким образом, что когда вещи больше не считаются активными, они перемещаются из набора «активных» таблиц в набор «хронологических» таблиц. Это помогает сохранять «активные» таблицы достаточно маленькими, чтобы запросы возвращались быстро. С другой стороны, таблицы истории огромны. Соответствующие столбцы индексируются в этих таблицах, и если вы запрашиваете что-то конкретное, он быстро возвращается.

Проблема заключается в том, что вы создаете отчет Crystal, который запрашивает у пользователя параметр. По неизвестным мне причинам параметры Crystal не переводятся в параметры SQL, поэтому в итоге вы получаете запросы, выбирающие все из внутренней таблицы истории заголовка заказа, объединенной со всем в таблице истории строк заказа, что приводит к более чем 8 миллионам строк.

Есть ли способ заставить Crystal Reports использовать параметры в запросе SQL вместо загрузки всех записей и фильтрации по факту? Я где-то читал, что хранимая процедура должна работать, но мне любопытно, возможен ли обычный параметризованный запрос в интересах экономии моего времени.

Вот формула выбора:

(
    trim({Orderheader.ord_no}) = {?Order No}
)
and
(
    {Orderheader.ord_type} = 'O'
)
and 
(
    {orderlines.ord_type} = 'O'
)

1 Ответ

3 голосов
/ 28 января 2010

В верхнем меню Crystal Reports перейдите в Отчет / Формулы выбора / Запись ... Там вы можете добавить формулу, похожую на:

{table.field1} = {?Parameter1} and {table.field2} = {?Parameter2}

Это добавит условие к оператору where SQL-запроса, который отчет будет использовать для извлечения строк.

Чтобы проверить, каково условие в операторе where, который используется в отчете для извлечения данных, вы можете перейти в базу данных меню / Show SQL Statement. Таким образом, вы можете убедиться, что в отчете используются параметры фильтра.

Руководство пользователя Crystal Reports 8.5 содержит следующие советы:

Чтобы отменить выбор записи, вы необходимо выбрать «Использовать индексы или сервер для Скорость »в диалоге параметров отчета поле (доступно в меню Файл).

В формулах выбора записей избегайте данных преобразования типов в полях, которые не поля параметров. Например, избегайте использования ToText () для преобразования числовое поле базы данных в строку поле базы данных.

Вы можете нажать некоторые формулы выбора записей которые используют константные выражения.

Ваша формула имеет функцию TRIM для поля. Функция против поля не позволяет Crystal передавать формулу в базу данных, поскольку она не является константным выражением.

Если вам действительно нужно обрезать поле номера заказа, вы должны сделать это, используя SQL Expressions .

Ссылки: Проверьте это статья .

...