Обнуление даты

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gromov
Старожил
Сообщения: 263
Зарегистрирован: 11 Февраль 2009, 8:41
Откуда: г. Анапа
Поблагодарили: 3 раза

Обнуление даты

Сообщение 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 ?
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Обнуление даты

Сообщение Andrew™ »

Для этого поля в БД должен быть разрешён NULL и если в проге поле пустое, в БД пойдёт NULL

MAVTRACE пользуйся - там видно, при первом обращении к БД идёт проверка соответсвия структуры в БД и в программе, в частности атрибут NULL для полей, покажи лог где идёт

Код: Выделить всё

SELECT * FROM ТвояТаблица WHERE 0 = 1
и вообще - как ты делаешь этот 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
gromov
Старожил
Сообщения: 263
Зарегистрирован: 11 Февраль 2009, 8:41
Откуда: г. Анапа
Поблагодарили: 3 раза

Re: Обнуление даты

Сообщение gromov »

Спасибо,Андрей.
Трэйс использую, помогает. Поля в БД и словаре NULL. Проверил - поставил в словаре TRUE и меня стали посылать при добавлении нулевых дат.
Пример оч пригодился. Непонятно, зачем делается вот это

MAVCOPY(rec,MAVTABLE,SIZE(MAVTABLE))

И еще. Если я хочу обнулить даты по условию, т.е. более чем у одной записи

Update Table set date= ... where id=1


Что здесь подставить ? Пробовал date =' & '''' & FORMAT(date_date,@d10-) & '''' и меня обругали за вот это ' . . '
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Обнуление даты

Сообщение 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
gromov
Старожил
Сообщения: 263
Зарегистрирован: 11 Февраль 2009, 8:41
Откуда: г. Анапа
Поблагодарили: 3 раза

Re: Обнуление даты

Сообщение gromov »

Еще раз спасибо.
Ну вот, теперь видно, как этот NULL подсунуть :)))
Ответить