Обработка пропущенных или неопределенных значений

 

В БД есть два типа полей: обязательные и необязательные. Как правило, в БД поля необязательные (как обсуждалось в разд. "Запрет незаполненных полей" главы 4), что означает для неаккуратного пользователя возможность пропуска большого числа значений. Эти пропущенные значения называют неопределенными (null), и их следует тщательно обрабатывать.

Если вы хотите написать условие отбора, вылавливающее неопределенные значения, просто введите в ячейку Условие отбора следующий текст: Is Null

Это условие выберет все записи с пропущенными значениями. Воспользуйтесь им в поле CustomerID таблицы Orders для поиска всех заказов, не связанных с клиентом. Или игнорируйте несвязанные записи, заменив условие отбора на обратное:

Is Not Null

 

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

У функции Nz () два аргумента. Первое значение (как правило, поле запроса) может содержать неопределенное значение. Второй параметр — это значение, которое вы хотите отобразить в результатах запроса, если программа Access найдет неопределенное значение. Далее приведен пример, использующий функцию Nz ( ) для преобразования в 0 неопределенных значений в поле Quantity:

Nz([Quantity],   0)

Преобразование в 0 — стандартное поведение для функции Nz ( ), поэтому можно опустить второй параметр, если это как раз то, что вам нужно:

Nz([Quantity])

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

OrderItemCost:   [Quantity]   *   [Price]

Это выражение приведет к ошибке, если значение поля Quantity будет неопределенным. Неопределенные значения странным образом распространяются наподобие инвазивного грибка. Если у одного из операндов в вычислении неопределенное значение, результат автоматически становится неопределенным. В данном примере это означает, что иоле OrderItemCost для данной записи становится неопределенным. Хуже того, если OrderItemCost ввести в другое вычисление или промежуточный итог, они тоже станут неопределенными. Прежде чем вы об этом узнаете, ваши значимые данные запроса превратятся в кучу ячеек с неопределенными значениями.

Для устранения этой проблемы очистите необязательные ноля от неопределенных значений с помощью функции Nz ( ): OrderItemCost:   Nz([Quantity])   *  Nz([Price])

Наконец, функцию Nz ( ) можно использовать для замены всех неопределенных значений другой величиной, В текстовое поле можно ввести что-то более информативное. Далее приведен пример, отображающий текст ("Not Entered"  — не введено) рядом с каждой записью, не содержащей имени и фамилии:

Name:   Nz([FirstName]   &   [LastName],   "[Not Entered]")

 

 

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100