Решение вопроса со значениями NULL

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

Crystal Reports может возвращать непонятные результаты для формул, столкнувшихся в базе данных с нолем, в котором содержится значение null (это специальное значение, обозначающее “пустое” значение, а не 0, если речь идет о числовом поле, или пустую строку, если речь идет о строковом/текстовом поле). То, будет база данных содержать значения null или нет, определяется несколькими факторами. В большинстве случаев это зависит от способа, которым база данных разрабатывается изначально. Если вы хотите избежать появления значений null в отчетах, знайте, что Crystal Reports позволяет преобразовать их сразу в формат значений по умолчанию (обычно для числовых полей значением по умолчанию является 0, а для строковых полей — пустая строка). Чтобы сделать это для всех создаваемых впоследствии отчетов, выберите в меню File (Файл) пункт Options (Параметры), в появившемся диалоговом окне перейдите на вкладку Reporting (Отчеты) и установите флажок Convert Database NULL Values to Default (Преобразовывать значения NULL из базы данных в значения по умолчанию). На этой вкладке также будет доступна и опция Convert Other NULL Values To Default (Преобразовывать другие значения NULL в значения по умолчанию), позволяющая справляться с другими значениями, извлекаемыми не из баз данных (а, например, из каких-нибудь формул), которые также могут возвращать “нулевые” значения. Чтобы установить эти опции только для текущего отчета, установите упомянутые флажки в диалоговом окне, доступном в результате выбора в меню File пункта Report Options.

Строковые формулы особенно подвержены проблемам, возникающим в результате появления значения null. Если хоть одно поле в используемой строковой формуле вернет null, вся формула возвратит null (такие формулы еще иногда называют “формулами, возвращающими исключение”).

Существует несколько способов борьбы со значениями null и устранения возникающей в результате их появления путаницы в формулах. Первый — использовать формулу If-Then-Else вместе со встроенной функцией IsNull (описываемой далее в этой главе). Второй — установить упоминавшиеся выше флажки Convert Database NULL Values to Default и Convert Other NULL Values To Default. Однако Crystal Reports XI предлагает еще один способ для решения проблем с появлением значений null в формулах (строках или других элементах). В панели инструментов редактора Formula Editor появилась новая опция, а точнее, выпадающий список, предоставляющий на выбор два варианта: Exceptions For Nulls (В случае появления NULL генерировать исключение) и Default Value For Nulls (Заменять значения NULL значениями по умолчанию). Первое, что следует запомнить — это то, что выбор ни того, ни другого варианта не будет иметь никакого эффекта, если появление в формуле значений null невозможно. То есть если вы установили флажок Convert Database NULL Values to Default, как описывалось выше, ни одна из формул в вашем отчете никогда не будет содержать значений null, а значит, выбор того или иного варианта в выпадающем списке не будет иметь никакого смысла.

Однако если появление в формуле значений null не исключается, эта новая опция позволит вам указать, как эти значения будут обрабатываться в каждой формуле. Если вы выберите вариант Exceptions For Nulls, то в случае появления в формуле значений null, они будут рассматриваться как исключения. Например, формула конкатенации строк, столкнувшись со значением null, вернет в отчет значение null (или исключение) — то есть фактически никакие данные не появятся. Выбирая вариант Default Value For Nulls, вы, по сути, выбираете опцию Convert Database NULL Values to Default, но только для одной данной формулы. В этом случае формула конкатенации строк вернет не исключение, а определенные результаты, в которых для поля, в противном случае вернувшего бы значение null, будет отображаться пустая строка.

Если вы хотите, чтобы тот или иной параметр всегда использовался по умолчанию для всех создаваемых вами в дальнейшем формул, выберите в меню File пункт Options. Затем перейдите на вкладку Formula Editor и установите требуемую опцию.

Предполагая, что дата приема на работу в “унаследованной” базе данных представлена восьмисимвольным строковым полем в формате гггг/мм/дд, приведенная ниже формула преобразует ее в формат мм/дд/гггг:

{EMP_HIRE_DATE}[5 to 6] & "/" & {EMP.HIRE_DATE}[7 to 8] &

"/" & {EMP.HIRE_DATE}[1 to 4]

Следует отметить, что операция индексирования может возвращать не только один символ, но и диапазон символов.

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

Mid({EMP_HIRE_DATE},5,2) & "/" & Right({EMP.HIRE_DATE},2) &

"/" & Left({EMP.HIRE_DATE},4)

В данном случае функция Mid принимает три аргумента: поле или строку, которую следует использовать, позицию в строке, с которой следует начинать считывание, и количество возвращаемых символов (существует также версия функции Mid, принимающая два аргумента). Функции Left и Right принимают два аргумента: используемое поле или строку и количество возвращаемых символов.

Совет. Подробное описание всех доступных в Crystal Reports функций для создания формул, а также примеры их использования, вы сможете найти в приложении А.

 

Функция ToText
Разделение строк/извлечение строк по частям
Формулы, работающие с типом даты/времени
Количество дней между двумя датами
Функция DateValue

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


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