Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Поставить условие на "null"


Автор: mspuz 7.10.2005, 11:26
Проблема
в Interbase я писал:

if IBQuery1.FieldValues['recno']<>null then MyPer:=IBQuery1.FieldValues['recno'] else MyPer:='';

а в BDE такое не прокатывает - пишет, что необъявленная переменная "null". Пробывал использовать "nil", тоже не получилось. Так как надо???

Автор: Darhazer 7.10.2005, 11:32
А попробувал is not null ?
P.S. это в самом запросе, я поздно увидел что ты сравниваеш уже результати запроса
Попробуй пустую строку ("") пользуват?

Автор: mspuz 7.10.2005, 11:37
Пробовал я с пустой строкой - не получается smile

Автор: Петрович 7.10.2005, 11:53
Что-то не то ты пишешь.
1. Null это функция возвращающая "пустое" значение типа Variant. А по сему, никакого отношения к способу доступа к БД (BDE, Interbase, и пр.) это не имеет. Кстати, это функция определена в модуле Variants, и если тебе компилятор пишет "необъявленная переменная "null"." , то вероятно ты забыл указать этот модуль в uses.
2. А для проверки на Null значения поля, у каждого поля есть метод IsNull. Вот его и логичнее использовать в твоем случае. Например так:
Код

if not IBQuery1.FieldByName('recno').IsNull then MyPer:=IBQuery1.FieldValues['recno'] else MyPer:='';

3. Именно твой фрагмент я бы записал так:
Код

MyPer:=IBQuery1.FieldByName('recno').AsString;

Семантически это будет эквивалентно, зато гораздо естественнее смотрится.

Автор: kobra 7.10.2005, 12:38
1. ето луще делать в запросе ISNULL(field, '') AS field (правда не помню, в интербеис такое есть?).
2. гдето, когдато читал что в физическои базе NULL занимает болше места, чем пустое значение, по етому было рекомендовано ползоватся пустым значением, числом 0, заведомо установленнои нереалнои датои.

Автор: mspuz 7.10.2005, 12:57
Петрович Огромное спасибо!!! Очень точный и полностью исчерпывающий ответ!!!
P.S. Узнал много нового smile

Автор: Петрович 7.10.2005, 13:04
Цитата(kobra @ 7.10.2005, 13:38)
1. ето луще делать в запросе ISNULL(field, '') AS field (правда не помню, в интербеис такое есть?).

Иногда бывает необходимость проверки на NULL в программе а не в запросе.

Цитата(kobra @ 7.10.2005, 13:38)
2. гдето, когдато читал что в физическои базе NULL занимает болше места, чем пустое значение, по етому было рекомендовано ползоватся пустым значением, числом 0, заведомо установленнои нереалнои датои.

Даже если и так. Все равно, те проблемы которые ты получаешь при отказе от использования NULL, не идут ни в какое сравнение с незначительным увеличением размера БД.

Автор: bas 7.10.2005, 14:14
В Oracle , например - Null не есть 0 или ''.

Автор: Петрович 7.10.2005, 22:25
Цитата(bas @ 7.10.2005, 15:14)
В Oracle , например - Null не есть 0 или ''.

Хм. А что, где-то Null соответствует 0 или '' ?
Лично я такого не встречал. Null он и в африке Null.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)