Авторизация



Использование полей SQi-выражений

Оценить
(0 голоса)

Иногда необходимо, чтобы сервер базы данных фактически выполнял некоторые вычисления, отсылая вычисленное поле обратно вместе с результирующим набором базы данных. Добиться этого можно с помощью полей SQL-выражений, создаваемых непосредственно в окне Filed Explorer. SQL-выражение (SQL expression) подобно формуле за исключением того, что оно полностью состоит из полей базы данных и SQL-функций, поддерживаемых языком определенного сервера SQL, с которым вы работаете. Иногда использование SQL-выражения вместо SQL-формулы дает некоторые преимущества. Выражение вычисляется на стороне сервера, а не клиента, что может улучшить показатели производительности.

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

Создание SQL-выражений

Первое необходимое условие для применения SQL-выражений заключается в том, что использоваться должна база данных SQL или ODBC. При использовании базы данных ПК, не работающей с SQL-интерфейсом, SQL-выражения не применяются, и в окне проводника Field Explorer даже не будет отображаться соответствующая категория. Также использовать SQL-выражения не получится и в тех случаях, когда отчет основан на одной или более SQL-командах, хранимых процедурах или представлениях Business View.

Когда применяется прямое соединение с базой данных SQL, окно проводника Field Explorer включает дополнительную категорию под названием SQL Expression Fields (Поля SQL-выражений). Щелкните на кнопке Field Explorer (Проводник полей), расположенной в панели стандартных инструментов, или воспользуйтесь пунктом Field Explorer меню View (Вид), чтобы отобразить диалоговое окно Field Explorer (или, если окно проводника Field Explorer было свернуто посредством щелчка на значке с изображением кнопки, наведите на него курсор мыши). Затем щелкните на категории SQL Expression Fields (Поля SQL-выражения) и щелкните на кнопке New (Создать), расположенной в панели инструментов проводника полей, или же щелкните правой кнопкой мыши на категории SQL Expression Fields и в появившемся контекстном меню выберите пункт New. Использование полей SQi-выражений

Процесс создания SQL-выражения во многом подобен процессу создания формул Crystal Reports (см. главу 5). Сначала последует приглашение присвоить SQL-выражению имя. Как и в случае с именами формул, имена SQL-выражений должны быть достаточно короткими и легкими для понимания. В имя можно включать пробелы, а также заглавные и строчные буквы. При размещении SQL-выражения в разделе подробностей отчета присваиваемое SQL-выражению имя будет также и заголовком столбца.

Сразу после присвоения имени SQL-выражению и щелчка на кнопке ОК откроется диалоговое окно SQL Expression Editor (Редактор SQL-выражений), показанное на рис. 15.25.

Обратите внимание на схожие черты между редактором SQL-выражений и другими доступными в Crystal Reports редакторами формул. Создание SQL-выражений в сущности то же самое, что и создание других формул: введите выражение непосредственно в текстовой области Formula (Формула) или дважды щелкните в верхней части каждого из трех полей, если необходима помощь в построении выражения. Обратите внимание на то, что при работе с формулами, полями параметров и результирующими полями Crystal Reports добавляет в начале имени SQL-выражения специальный символ процента (%), который служит для обозначения полей SQL-выражения.

Функции и операторы, доступные в редакторе SQL-выражений, будут меняться в зависимости от используемой базы данных и драйвера. Если вы посмотрите на дерево функций на рис. 15.26, то увидите там конкретный набор доступных SQL-функций.

Использование полей SQi-выражений

Рис. 15.26. Изменения в SQL-запросе после размещения SQL-выражения в разделе подробностей отчета

В данном примере представлены функции для отчета, использующего Microsoft Access через ODBC. Для другого метода подключения с этой же базой данных или для базы данных другого типа диалоговое окно редактора SQL-выражений будет отображать совершенно иной набор SQL-функций. Поэтому после изменения используемой в отчете базы данных с помощью пункта Set Location (Установить расположение) меню Database, скорее всего, потребуется отредактировать или изменить некоторые SQL-выражения. Для получения более подробной информации о различных встроенных SQL- функциях вашей определенной базы данных или драйвера, просмотрите документацию по этой базе данных или драйверу.

Например, может возникнуть потребность, чтобы у просматривающего отчет пользователя была возможность с помощью всего лишь одного поля параметра задавать полностью или частично имя контактного лица для поиска. Если клиент, контактные данные которого совпадают с введенными данными, существует, он будет включен в отчет. В таблице Customer (Клиенты) образца базы данных XTREME контактная информация фактически разнесена по отдельным полям базы данных First Name (Имя) и Last Name (Фамилия). Без использования SQL-выражения существует два способа настройки такого поиска:

•    Создать два поля параметров — одно для имени, а другое для фамилии — и попытаться сравнить их с полями базы данных.

•    Создать формулу Crystal Reports, объединяющую имя и фамилию, и сравнить формулу с полем параметра.

Однако проблемы возникают при использовании любого из этих двух способов. Если выбирается первый вариант, для просматривающего отчет пользователя становится намного сложнее ввести полностью или частично имя контактного лица, такое как, например, “Chris” (чтобы отыскать, скажем, всех клиентов с именем “Christopher” и “Christine”), поскольку для игнорирования поля параметра с фамилией, если пользователь желает выполнить поиск только по именам (полным или неполным), потребуется дополнительная логика. Или же, если работающий с отчетом пользователь желает просмотреть всех клиентов с фамилией “Jones”, независимо от их имени, тогда для поля параметра с именем понадобится применить подобную логику. Пользователю для поиска нужных клиентов было бы намного проще иметь возможность ввести “Chris*” или “*Jones”.

При выборе второго варианта поиск по полностью или частично введенному имени, описанный выше, будет работать, но поскольку имя и фамилия объединяются в формуле,

операция по выбору записей не будет выполняться на сервере базы данных (памятуйте о том, что большинство формул Crystal Reports нельзя преобразовать в SQL, так что выбор записей будет выполняться на стороне клиента). Использование полей SQi-выражений

Используя SQL-выражения, вы получаете возможность объединить преимущества обоих способов. Имя и фамилию можно объединить в один объект и сравнить с полем параметра. Но поскольку операция конкатенации выполняется на сервере базы данных, он также будет выполнять и операцию выборки записей, отправляя обратно клиенту данные только о запрашиваемых клиентах, а не обо всех клиентах.

SQL-выражение, позволяющее добиться таких результатов, удивительно похоже на формулу Crystal Reports:

'Customer'Contact First Name' + ' 1 +

'Customer'.'Contact Last Name'

Однако обратите внимание на различия:

•    Имена полей не заключаются в фигурные скобки.

•    Строковый литерал, который разделяет поле имени и поле фамилии, должен использовать обратные одинарные кавычки — двойные кавычки работать не будут.

После того, как SQL-выражение создано, его можно перетащить в отчет подобно любому полю базы данных, полю формулы или другому объекту. Также его можно использовать в обычных формулах отчета или в формулах для условного форматирования. Обратите внимание на изменения в SQL-запросе (открыв его для просмотра путем выбора в меню Database пункта Show SQL Query), появившиеся после размещения упомянутого SQL-выражения в разделе подробностей (рис. 15.26).

Хотя в отчете полю SQL-выражения было присвоено имя, Crystal Reports непосредственно в SQL-оператор добавляет только саму формулу SQL-выражения. Имя поля SQL-выражения просто присутствует в эксперте Select Expert и в других частях отчета.

Для применения этого SQL-выражения в операции выбора записей воспользуйтесь доступной в диалоговом окне эксперта Select Expert операцией Like, которая позволяет указывать групповые символы при поиске по объединенным имени и фамилии контактного лица. Если строковое поле параметра с именем {?Contact Prompt} уже создано, диалоговое окно Select Expert будет выглядеть так, как показано на рис. 15.27.

Если после этого при обновлении отчета и появления приглашения указать значения для поля параметра {?Contact Prompt} вы введете Chris*, то получите результаты, показанные на рис. 15.28.

SQL-запрос, отправляемый серверу базы данных, показан на рис. 15.29.

Использование полей SQi-выражений

Рис. 15.29. SQL-запрос, отправляемый серверу базы данных, результаты выполнения которого показаны на рис. 15.28

Обратите внимание, что конструкция WHERE включает текст формулы SQL-выражения и SQL-операцию сравнения, разрешающую поиск с использованием групповых символов. В конечном итоге получаются гибкие формулы Crystal Reports в сочетании с высокой скоростью выполнения на сервере операций выбора записей.

 

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

Добавить комментарий


Защитный код
Обновить