Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

3.1.4.4. Null в командах и встроенных функциях vfp

Основные правила обработки NULL:

  • команды, получив NULL в качестве параметра, генерируют ошибку (имеются исключения, например команда STORE);

  • функция (процедура), если параметр может быть NULL, передает NULL результату, если не может – генерирует ошибку;

  • функции ISBLANK( ), ISDIGIT( ), ISLOWER( ), ISUPPER( ), ISALPHA( ) и EMPTY( ), получив NULL, возвращают .F.;

  • команды INSERT – SQL и SELECT – SQL обрабатывают NULL-величины и помещают их в записи, если соответствующие поля принимают NULL;

  • SQL-агрегатные функции NULL игнорируют;

  • VFP-агрегатные функции, например функция SUM( ) команды CALCULATE, вернут 0, если все обрабатываемые величины – это NULL. В противном случае NULL игнорируется.

Пример 1. NULL как параметр встроенных функций.

store .NULL. to n

? Left('abc', n) && Напечатает: .NULL.

? Left(.NULL., 1) && Напечатает: .NULL.

? At('abc', .NULL.) && Напечатает: .NULL.

? Sin(n) && Напечатает: .NULL.

Пример 2. NULL как параметр команд.

store .NULL. to n

use Authors in (n) && Генерирует ошибку

select Test && Таблица Test открыта

average TestFloat next n to avgValue && Генерирует ошибку

Пример 3. Поле TestFloat таблицы Test определено в соответствии с рис. 3.1.

Рис. 3.1. Поле TestFloat таблицы Test

Во всех записях, кроме одной, таблицы в поле TestFloat находится NULL. Единственная запись, отличная от NULL, имеет значение 1.000.

calculate Sum(TestFloat) to sumValue

? sumValue && Напечатает: 1.00

&& Выберет поле TestFloat всех записей

select TestFloat from Test

&& Формирует курсор с одной записью, имеющей значение 1.000

select Sum(TestFloat) from Test

3.1.5. Пустые значения

Пустые значения различных типов приведены в табл. 3.6.

Таблица 3.6

Пустые значения

Тип данных

Пустое значение

Blob

Байты с нулями, например 0h, 0h00, 0h000000

Character

Строка нулевой длины, пробелы, знаки табуляции, возврата каретки, конца строки и любые их комбинации

Numeric

0

Currency

0

Float

0

Integer

0

Double

0

Date

Дата с пустыми частями даты; вернет, например, CTOD('"")

DateTime

Дата и время с пустыми частями даты и времени; вернет, например, CTOT("")

Logical

.F.

Memo

Поле без единого символа

General

Поле без OLE-объекта

Varbinary

То же, что и в случае Blob

Функция

EMPTY(eExpression)

определяет, является ли выражение пустым. Возвращает .T., если это так, или .F. – в противном случае.

Функция EMPTY( ) не может быть применена для определения, является ли пустой ссылка на объект или нет. Например, если переменная содержит ссылку на форму, то после ее закрытия эта переменная будет содержать NULL, то есть не пустое значение, а ее тип по-прежнему будет Object. То есть ответ, содержит ли переменная ссылку на объект или нет, дает одновременной употребление 2-х функций – TYPE( ) и ISNULL( ).

Пример:

oForm = CreateObject('Form')

if Type('oForm') = 'O' then

if not IsNull(oForm) then

? 'oForm содержит ссылку на объект'

endif

endif

Функция

EVL(eExpression1, eExpression2)

возвращает не пустую величину для двух выражений.

Используется, чтобы получить подходящую величину вместо пустого значения, такого как .F., 0 или "". Также употребляется для удаления пустых значений из операций, в которых пустые значения недопустимы.

Возвращает eExpression1, если оно не вычисляется с пустым значением, или eExpresssion2 – в противном случае.

Параметры:

eExpression1, eExpression2 – выражения любого типа, кроме General. Также eExpression1 не может иметь тип и Object.

Пример:

var1 = 0

var2 = 5

? Evl(var1, "Пусто") && Напечатает: Пусто

? Evl(var2, "Пусто") && Напечатает: 5

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]