OLEDB и MS Access
От: Freid  
Дата: 29.01.12 21:25
Оценка:
Появилась проблема с OLEDB и MS Access — не получается записать NULL в поле с датой/временем если там уже есть какое-то значение. Поле необязательное и пока оно пустое все работает нормально, но как только туда попадает какая-то дата, то обнулить ее уже никак не получается. Как быть???

Использую стандартную ATL обертку CCommand<CAccessor<...> >
Перед записью задаю нулевой статус, все как положено:

m_dwFieldStatus = DBSTATUS_S_ISNULL;
...
Table.SetData();


но аксесу всё по барабану и предыдущее значение остается как ни в чем не бывало. В чем дело? Как же все-таки перезаписать значение в базе?
заколдованное дата/время
Re: OLEDB и MS Access
От: 5er Россия  
Дата: 22.02.12 11:10
Оценка:
Здравствуйте, Freid, Вы писали:

F>Появилась проблема с OLEDB и MS Access — не получается записать NULL в поле с датой/временем если там уже есть какое-то значение. Поле необязательное и пока оно пустое все работает нормально, но как только туда попадает какая-то дата, то обнулить ее уже никак не получается. Как быть???


F>Использую стандартную ATL обертку CCommand<CAccessor<...> >

F>Перед записью задаю нулевой статус, все как положено:

F>
F>m_dwFieldStatus = DBSTATUS_S_ISNULL;
F>...
F>Table.SetData();
F>


F>но аксесу всё по барабану и предыдущее значение остается как ни в чем не бывало. В чем дело? Как же все-таки перезаписать значение в базе?


Похоже на старый баг OLEDB провайдера.
При чтении значения ССommand при GetStatus == DBSTATUS_S_ISNULL возвращалось корректное предыдущее значение.
Нужно сначала проверить статус, потом читать значение, если оно не null.
Насколько я помню, с каким-то сервис паком MDAC'а это фиксилось.
Re[2]: OLEDB и MS Access
От: 23W http://kyselgov.pp.ua/
Дата: 07.05.12 07:20
Оценка:
Здравствуйте, 5er, Вы писали:

5er>Здравствуйте, Freid, Вы писали:


F>>Появилась проблема с OLEDB и MS Access — не получается записать NULL в поле с датой/временем если там уже есть какое-то значение. Поле необязательное и пока оно пустое все работает нормально, но как только туда попадает какая-то дата, то обнулить ее уже никак не получается. Как быть???


F>>Использую стандартную ATL обертку CCommand<CAccessor<...> >

F>>Перед записью задаю нулевой статус, все как положено:

F>>
F>>m_dwFieldStatus = DBSTATUS_S_ISNULL;
F>>...
F>>Table.SetData();
F>>


F>>но аксесу всё по барабану и предыдущее значение остается как ни в чем не бывало. В чем дело? Как же все-таки перезаписать значение в базе?


5er>Похоже на старый баг OLEDB провайдера.

5er>При чтении значения ССommand при GetStatus == DBSTATUS_S_ISNULL возвращалось корректное предыдущее значение.
5er>Нужно сначала проверить статус, потом читать значение, если оно не null.
5er>Насколько я помню, с каким-то сервис паком MDAC'а это фиксилось.

В базах данных есть особенность с сохранением пустого значения в поле (Access тут не исключение), к сожалению детально не помню... нужно читать мануалы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.