![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как присвоить полю Integer значение
N&N © (2003-07-14 11:09:00)Уважаемые Мастера,
окажите помощь, пожалуйста!
Есть поле типа Integer, перед Постом нужно проверить, если значение равно Null, то присвоить значение 0, подскажите, пожалуста, как это сделать.
N&N (2003-07-14 13:36:00) [1]>Bushman
Понятно, большое спасибо, направления для копания получил.
bushmen (2003-07-14 13:31:00) [2]N&N>
В таком случае, у тебя NULL выдает только в случае, если у тебя нет ни одной выборки (нет ни одного слагаемого) по условию. Поэтому, в клиенте программно проверяй на отсутствие НД в рекордсете
N&N (2003-07-14 13:22:00) [3]>Zacho
Вообще-то надо изначально правильно проектировать БД. Поля, по которым может быть суммирование должны быть NOT NULL DEFAULT 0.
Вообще-то у меня так и сделано, но в резултате запроса при определенных параметрах условия "Where" в одном из слагаемых получается Null, вот и начинаются неувязки.
Zacho (2003-07-14 13:14:00) [4]
> DenK_vrtz © (14.07.03 13:09)
>(единственное not null забыл указать) :-)
А не надо забывать :-) NOT NULL здесь самое существенное.
DenK_vrtz (2003-07-14 13:09:00) [5]Zacho © (14.07.03 12:52), а не знаешь кто за такую же идею чуть выше критиковал? (единственное not null забыл указать) :-)
bushmen (2003-07-14 12:58:00) [6]N&N>
попробуй изменить структуру таблиц как сказал Zacho. Только перед этим сделай update тфблицы и замени все null на 0
Zacho (2003-07-14 12:52:00) [7]Вообще-то надо изначально правильно проектировать БД. Поля, по которым может быть суммирование должны быть NOT NULL DEFAULT 0. Лучше всего так и сделать.
Если сейчас изменить структуры БД нет возможности, то можно использовать какую-либо UDF (смотри на www.ibase.ru). В Yaffil можно было бы использовать фунцию IIF, в FB1.5 - COALESCE или CASE, а в IB - только UDF.
N&N (2003-07-14 12:06:00) [8]>Bushmen
select isnull(sum(field1), 0), isnull(sum(field2), 0), isnull(sum(field1), 0)+isnull(sum(field2), 0) from ...
а что мне попытаться сделать еще, если при этом выдается сообщение function unknown isnull
bushmen (2003-07-14 11:46:00) [9]select isnull(sum(field1), 0), isnull(sum(field2), 0), isnull(sum(field1), 0)+isnull(sum(field2), 0) from ...
DenK_vrtz (2003-07-14 11:46:00) [10]N&N (14.07.03 11:39),
надо сделать, чтобы в таблицу значения null не записывались (см.выше) или обрабатывать null в запросе (в IB6.x не знаю как, к сожалению)
N&N (2003-07-14 11:39:00) [11]Извиняюсь за назойливость, но рекомендованными способами мне не удалось решить свою проблему.Немного расширю вопрос.
Если в запросе
select sum(field1), sum(field2), sum(field1)+sum(field2) from...
значение в sum(field1) будет Null, то в sum(field1)+sum(field2) тоже будет Null, хотя в sum(field2) значение не равно Null . Не могу победить такую проблему.
N&N (2003-07-14 11:20:00) [12]Большое спасибо за помощь.
Zacho (2003-07-14 11:20:00) [13]
> DenK_vrtz © (14.07.03 11:11)
Если запрос будет вида UPDATE MY_TABLE SET MY_FIELD=NULL или INSERT INTO MY_TABLE (MY_FIELD,..) VALUES (NULL,..) то это ничего не даст.
DenK_vrtz (2003-07-14 11:18:00) [14]N&N (14.07.03 11:16), см. выше
Alexandr (2003-07-14 11:17:00) [15]Dataset.OnNewRecord
N&N (2003-07-14 11:16:00) [16]>DenK_vrtz
Поставить значение 0 по умолчанию в таблице
А нельзя ли это проделать программным способом?
Alexandr (2003-07-14 11:16:00) [17]или триггер...
Жук (2003-07-14 11:15:00) [18]Или триггером : if new.field is null then new.field=0
Q (2003-07-14 11:14:00) [19]в приложении - событие Table.BeforePost, Query.BeforePost
на сервере - через треггер
DenK_vrtz (2003-07-14 11:11:00) [20]Поставить значение 0 по умолчанию в таблице