Конференция "Базы" » Записать 0 в поле
 
  • O.O (10.06.10 12:17) [0]
    Ситуация такая, в таблице есть поле формата DOUBLE PRECISION и в нём допускаются значение Null
    Поставить полю параметр not Null уже нельзя.
    При записи 0 в поле туда записывается Null
    Каим образом можно записать туда 0 а не Null ?
  • Amoeba_ (10.06.10 12:29) [1]
    СУБД какая?
  • turbouser © (10.06.10 12:29) [2]
    в триггере new.твое_поле = COALESCE(new.твое_поле,0)
  • Anatoly Podgoretsky © (10.06.10 13:00) [3]

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

    У тебя или ошибка в запросе, или в характеристиках поля, например злые тригера.
  • Sergey13 © (10.06.10 13:13) [4]
    > [0] O.O   (10.06.10 12:17)
    > Поставить полю параметр not Null уже нельзя.

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

    > При записи 0 в поле туда записывается Null
    Скорее всего ты в гриде видишь этот ноль. А это еще ничего не значит.
  • O.O (10.06.10 17:05) [5]

    > 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;

  • O.O (10.06.10 17:13) [6]

    > 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
  • Sergey13 © (10.06.10 17:50) [7]
    > [6] O.O   (10.06.10 17:13)
    > По крайней мере IBExpert этого делать не хочет.

    Так и пишет: "Не хочу этого делать, хоть сноси меня"?
  • O.O (10.06.10 17:57) [8]

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


    :)))
    Нет, не так. Просто не даёт изменять параметры этого поля
  • Anatoly Podgoretsky © (10.06.10 19:20) [9]
    > O.O  (10.06.2010 12:17:00)  [0]

    Тебе уже ответили, ты проверил варианты?
  • O.O (10.06.10 19:35) [10]
    Да всё проверяю и ничего не выходит !
    У таблицы есть триггер такой:

       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;


    Может туплю уже или глаза замылились, но ничё не выходит !  :(
  • O.O (10.06.10 19:39) [11]
    триггер before
  • O.O (11.06.10 06:24) [12]
    Извиняюсь перед всеми за беспокойство, сёдня утром легко нашёл причину.
    0 записывается без всяких доп примочек, но после записи далее по алгоритму программы вызывается ХП в которой я сам же написал чтоб нулевое значение обращать в Null, и всё это в одной транзакции :)
    От оно чё, от оно как бывает када память сбоит !
 
Конференция "Базы" » Записать 0 в поле
Есть новые Нет новых   [134433   +22][b:0][p:0.001]