Страница 1 из 1
Обнуление даты
Добавлено: 05 Июль 2012, 19:32
gromov
Возникла неожиданно проблема обнуления даты. База - Firebird.
Есть структура
S string(8)
SG group,pre(),over(S)
d date
t time
end
При добавлении записи делаем d=0 и все ок. На update ругается и все тут.
На d=0 орет, MAVCLEAR не помогает.
А в IBExpert команда
UPDATE Table SET D=null
проходит на ура
UPDATE Table SET D=0 - отфутболивается
Андрей, что делать ? Как ему подсунуть этот NULL ?
Re: Обнуление даты
Добавлено: 10 Июль 2012, 9:04
Andrew™
Для этого поля в БД должен быть разрешён NULL и если в проге поле пустое, в БД пойдёт NULL
MAVTRACE пользуйся - там видно, при первом обращении к БД идёт проверка соответсвия структуры в БД и в программе, в частности атрибут NULL для полей, покажи лог где идёт
и вообще - как ты делаешь этот UPDATE в программе?
Код: Выделить всё
rec LIKE(MAVTABLE)
MAVTABLE:Ref = 1
IF NOT MAVGET(MAVTABLE)
MAVCOPY(rec,MAVTABLE,SIZE(MMAVTABLE))
CLEAR(MAVTABLE:Date_DATE)
IF MAVUPDATE(MAVTABLE,rec)
MAVSHOWERROR
END
END
Re: Обнуление даты
Добавлено: 12 Июль 2012, 8:23
gromov
Спасибо,Андрей.
Трэйс использую, помогает. Поля в БД и словаре NULL. Проверил - поставил в словаре TRUE и меня стали посылать при добавлении нулевых дат.
Пример оч пригодился. Непонятно, зачем делается вот это
MAVCOPY(rec,MAVTABLE,SIZE(MAVTABLE))
И еще. Если я хочу обнулить даты по условию, т.е. более чем у одной записи
Update Table set date= ... where id=1
Что здесь подставить ? Пробовал date =' & '''' & FORMAT(date_date,@d10-) & '''' и меня обругали за вот это ' . . '
Re: Обнуление даты
Добавлено: 12 Июль 2012, 9:58
Andrew™
gromov писал(а):Спасибо,Андрей.
Трэйс использую, помогает. Поля в БД и словаре NULL. Проверил - поставил в словаре TRUE и меня стали посылать при добавлении нулевых дат.
Пример оч пригодился. Непонятно, зачем делается вот это
MAVCOPY(rec,MAVTABLE,SIZE(MAVTABLE))
в rec структуру скопировали оригинал записи
оригинал изменили
и если у MAVUPDATE есть второй параметр - то генерится UPDATE с SET не по всем полям, а только по изменённым
gromov писал(а):
И еще. Если я хочу обнулить даты по условию, т.е. более чем у одной записи
Update Table set date= ... where id=1
Что здесь подставить ? Пробовал date =' & '''' & FORMAT(date_date,@d10-) & '''' и меня обругали за вот это ' . . '
Код: Выделить всё
sql MAVexecute
sql.BindParameter(MAVTABLE:Id,1)
IF sql.Run('update ' & MAVTABLENAME(NAVTABLE) & ' set ' & sql.field(MAVTABLE:Date) & ' =null where ' & sql.field(MAVTABLE:ID) & '=?')
MAVSHOWERROR
END
Re: Обнуление даты
Добавлено: 12 Июль 2012, 13:47
gromov
Еще раз спасибо.
Ну вот, теперь видно, как этот NULL подсунуть

))