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

Первое необходимое условие для работы с выражениями SQL заключается в использовании базы данных SQL или ODBC. Если вы используете базу данных PC-типа, выражения SQL не применимы, и вы даже не увидите закладку SQL Expression в Field Explorer. При использовании базы данных SQL, в Field Explorer включена дополнительная категория, называемая SQL Expression Fields. Выбирая опцию Insert I SQL Expression Field всплывающего меню, можно вызвать Field Explorer, в котором эта категория уже выбрана.

Нельзя применять поля выражений SQL с хранимыми процедурами. Если ваш отчет основан на хранимой процедуре, категория SQL Expression Fields даже не появится в Field Explorer.

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

После того как вы ввели имя выражения SQL и нажали OK, появляется SQL Expression Editor, как показано на рисунке 7.

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

Функции и операторы SQL Expression Editor зависят от используемой базы данных и драйвера базы данных. Рассмотрев окно, содержащее дерево функций, изображенное на рисунке 7, вы заметите некоторый набор имеющихся в наличии функций SQL. Этот пример дан для отчета, использующего Microsoft SQL Server посредством ODBC. В то же время, Expression Editor предлагает совершенно другой набор функций SQL при использовании прямого драйвера базы данных для соединения с той же базой данных. По этой причине, при переходе от одной базы данных к другой с помощью опций Set Location или Convert Database Driver, имеющихся в раскрывающемся меню Database, может потребоваться редактирование или модификация некоторых выражений SQL. Чтобы получить детальное описание различных встроенных функций SQL именно для вашей базы данных или драйвера, обратитесь к документации для этой базы данных или драйвера.

Пусть, например, вы хотите, чтобы программа просмотра отчета могла определить полное или частичное контактное имя для поиска с помощью единственного поля параметра. Если существует заказчик, чье описание подходит под введенные данные, он будет включен в отчет. В таблице Customer в образце базы данных XTREME, включенном в Crystal Reports, контактная информация в настоящее время разделена в базе данных на поля имени и фамилии. Без использования выражений SQL имеется две возможности реализации данного поиска:

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

Оба подхода не идеальны. Если выбран первый вариант, то программе просмотра будет намного сложнее оперировать при вводе полного или частичного (сокращенного) контактного имени, например, "Ира" (например, при одновременном поиске Ира и Ираида). Действительно, в таком случае понадобится некоторое дополнительное логическое условие для игнорирования поля параметра фамилии. Наоборот, если программа просмотра должна найти все позиции с фамилией "Иванов," независимо от имени, потребуется применить то же логическое условие для поля параметра имени. Было бы значительно проще, если можно было бы просто напечатать Ира* или *Иванов для поиска желаемых заказчиков.

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

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

Выполняемое для этого выражение SQL удивительно похоже на формулу Crystal Reports:

Customer."Contact First Name" + ' + Customer."Contact Last Name"

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

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

Как только выражение SQL создано, его можно поместить в отчет, как если бы это было поле базы данных, поле формулы, или другой объект. Его также можно использовать в стандартных формулах отчета или условных форматирующих формулах. Обратите внимание на изменение запроса SQL (просматриваемого с помощью Database I Show SQL Query) после помещения этого выражения SQL в секции подробностей.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: