Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Записать 0 в поле


O.O ©   (2010-06-10 12:17:00) 

Ситуация такая, в таблице есть поле формата DOUBLE PRECISION и в нём допускаются значение Null
Поставить полю параметр not Null уже нельзя.
При записи 0 в поле туда записывается Null
Каим образом можно записать туда 0 а не Null ?


O.O   (2010-06-11 06:24:00) [1]

Извиняюсь перед всеми за беспокойство, сёдня утром легко нашёл причину.
0 записывается без всяких доп примочек, но после записи далее по алгоритму программы вызывается ХП в которой я сам же написал чтоб нулевое значение обращать в Null, и всё это в одной транзакции :)
От оно чё, от оно как бывает када память сбоит !


O.O   (2010-06-10 19:39:00) [2]

триггер before


O.O   (2010-06-10 19:35:00) [3]

Да всё проверяю и ничего не выходит !
У таблицы есть триггер такой:

   if (new.id is null) then
   new.id = gen_id(my_gen, 1);


Позволяет либо автоматом очередной ID вставлять либо свой id задать
Работает без проблем !

Пытаюсь тоже сделать с полем которое мне нужно и записать туда 0 - не выходит

 if (new.field is null) then new.field = 0;

Может туплю уже или глаза замылились, но ничё не выходит !  :(


Anatoly Podgoretsky   (2010-06-10 19:20:00) [4]

> O.O  (10.06.2010 12:17:00)  [0]

Тебе уже ответили, ты проверил варианты?


O.O   (2010-06-10 17:57:00) [5]


> Sergey13 ©   (10.06.10 17:50) [7]
> > [6] O.O   (10.06.10 17:13)> По крайней мере IBExpert этого
> делать не хочет.Так и пишет: "Не хочу этого делать, хоть
> сноси меня"?


:)))
Нет, не так. Просто не даёт изменять параметры этого поля


Sergey13   (2010-06-10 17:50:00) [6]

> [6] O.O   (10.06.10 17:13)
> По крайней мере IBExpert этого делать не хочет.

Так и пишет: "Не хочу этого делать, хоть сноси меня"?


O.O   (2010-06-10 17:13:00) [7]


> Sergey13 ©   (10.06.10 13:13) [4]
> > [0] O.O   (10.06.10 12:17)> Поставить полю параметр not
> Null уже нельзя.Почему? Проапдейтить таблицу set field=0
> where field is null и добавить констрейнт.>
По крайней мере IBExpert этого делать не хочет. Я обычно пытаюсь сделать изменения в нём, и если они проходят - уверенно его скрипт использую в программе для изменения в БД для обновления версий.

>При записи 0  в поле туда записывается Null
>Скорее всего ты в гриде видишь
> этот ноль. А это еще ничего не значит.

Нет, не в гриде. Этот Null сказывается в вычисляемых полях, результат которых тоже Null если в данных для расчёта есть значение Null


O.O   (2010-06-10 17:05:00) [8]


> Amoeba_   (10.06.10 12:29) [1]
> СУБД какая?


FB 2.0


Anatoly Podgoretsky ©   (10.06.10 13:00) [3]
>У тебя или ошибка в запросе, или в характеристиках поля, например злые тригера.


Запрос такой приблизительно:

   if QRead1.Active Then QRead1.Close;
   QRead1.SQL.Clear;
   QRead1.SQL.Append('SELECT GEN_ID(MY_GEN, 1) FROM RDB$DATABASE');
   QRead1.Prepare;
   QRead1.Open;
   My_ID := QRead1.FieldByName('GEN_ID').AsInteger;
   QRead1.Close;

   if QWrite1.Active then QWrite1.Close;
   QWrite1.SQL.Clear;
   QWrite1.SQL.Append('INSERT INTO TABLE (ID, FIELD) VALUES (:ID, :Data');
   QWrite1.ParamByName('ID').AsInteger := My_ID;
   QWrite1.ParamByName('Data').AsFloat := 0;
   QWrite1.Prepare;
   QWrite1.ExecSQL;


Sergey13   (2010-06-10 13:13:00) [9]

> [0] O.O   (10.06.10 12:17)
> Поставить полю параметр not Null уже нельзя.

Почему? Проапдейтить таблицу set field=0 where field is null и добавить констрейнт.

> При записи 0 в поле туда записывается Null
Скорее всего ты в гриде видишь этот ноль. А это еще ничего не значит.


Anatoly Podgoretsky   (2010-06-10 13:00:00) [10]


> При записи 0 в поле туда записывается Null

У тебя или ошибка в запросе, или в характеристиках поля, например злые тригера.


Amoeba_   (2010-06-10 12:29:00) [11]

СУБД какая?


turbouser   (2010-06-10 12:29:00) [12]

в триггере new.твое_поле = COALESCE(new.твое_поле,0)


Наверх

Титульная страница Поиск, карта сайта Написать письмо