-
Ситуация такая, в таблице есть поле формата DOUBLE PRECISION и в нём допускаются значение Null Поставить полю параметр not Null уже нельзя. При записи 0 в поле туда записывается Null Каим образом можно записать туда 0 а не Null ?
-
СУБД какая?
-
в триггере new.твое_поле = COALESCE(new.твое_поле,0)
-
> При записи 0 в поле туда записывается Null
У тебя или ошибка в запросе, или в характеристиках поля, например злые тригера.
-
> [0] O.O (10.06.10 12:17) > Поставить полю параметр not Null уже нельзя.
Почему? Проапдейтить таблицу set field=0 where field is null и добавить констрейнт.
> При записи 0 в поле туда записывается Null Скорее всего ты в гриде видишь этот ноль. А это еще ничего не значит.
-
> 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 © (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
-
> [6] O.O (10.06.10 17:13) > По крайней мере IBExpert этого делать не хочет.
Так и пишет: "Не хочу этого делать, хоть сноси меня"?
-
> Sergey13 © (10.06.10 17:50) [7] > > [6] O.O (10.06.10 17:13)> По крайней мере IBExpert этого > делать не хочет.Так и пишет: "Не хочу этого делать, хоть > сноси меня"?
:))) Нет, не так. Просто не даёт изменять параметры этого поля
-
> O.O (10.06.2010 12:17:00) [0]
Тебе уже ответили, ты проверил варианты?
-
Да всё проверяю и ничего не выходит ! У таблицы есть триггер такой:
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;
Может туплю уже или глаза замылились, но ничё не выходит ! :(
-
триггер before
-
Извиняюсь перед всеми за беспокойство, сёдня утром легко нашёл причину. 0 записывается без всяких доп примочек, но после записи далее по алгоритму программы вызывается ХП в которой я сам же написал чтоб нулевое значение обращать в Null, и всё это в одной транзакции :) От оно чё, от оно как бывает када память сбоит !
|