Возникла неожиданно проблема обнуления даты. База - 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™
					Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
	При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Re: Обнуление даты
Для этого поля в БД должен быть разрешён NULL и если в проге поле пустое, в БД пойдёт NULL
MAVTRACE пользуйся - там видно, при первом обращении к БД идёт проверка соответсвия структуры в БД и в программе, в частности атрибут NULL для полей, покажи лог где идёт
и вообще - как ты делаешь этот UPDATE в программе?
			
			
									
						MAVTRACE пользуйся - там видно, при первом обращении к БД идёт проверка соответсвия структуры в БД и в программе, в частности атрибут NULL для полей, покажи лог где идёт
Код: Выделить всё
SELECT * FROM ТвояТаблица WHERE 0 = 1Код: Выделить всё
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
 - Старожил
 - Сообщения: 281
 - Зарегистрирован: 11 Февраль 2009, 8:41
 - Откуда: г. Анапа
 - Поблагодарили: 3 раза
 
Re: Обнуление даты
Спасибо,Андрей.
Трэйс использую, помогает. Поля в БД и словаре NULL. Проверил - поставил в словаре TRUE и меня стали посылать при добавлении нулевых дат.
Пример оч пригодился. Непонятно, зачем делается вот это
MAVCOPY(rec,MAVTABLE,SIZE(MAVTABLE))
И еще. Если я хочу обнулить даты по условию, т.е. более чем у одной записи
Update Table set date= ... where id=1
  
Что здесь подставить ? Пробовал date =' & '''' & FORMAT(date_date,@d10-) & '''' и меня обругали за вот это ' . . '
			
			
									
						Трэйс использую, помогает. Поля в БД и словаре NULL. Проверил - поставил в словаре TRUE и меня стали посылать при добавлении нулевых дат.
Пример оч пригодился. Непонятно, зачем делается вот это
MAVCOPY(rec,MAVTABLE,SIZE(MAVTABLE))
И еще. Если я хочу обнулить даты по условию, т.е. более чем у одной записи
Update Table set date= ... where id=1
Что здесь подставить ? Пробовал date =' & '''' & FORMAT(date_date,@d10-) & '''' и меня обругали за вот это ' . . '
Re: Обнуление даты
в rec структуру скопировали оригинал записиgromov писал(а):Спасибо,Андрей.
Трэйс использую, помогает. Поля в БД и словаре NULL. Проверил - поставил в словаре TRUE и меня стали посылать при добавлении нулевых дат.
Пример оч пригодился. Непонятно, зачем делается вот это
MAVCOPY(rec,MAVTABLE,SIZE(MAVTABLE))
оригинал изменили
и если у 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