Появилась проблема с OLEDB и MS Access — не получается записать NULL в поле с датой/временем если там уже есть какое-то значение. Поле необязательное и пока оно пустое все работает нормально, но как только туда попадает какая-то дата, то обнулить ее уже никак не получается. Как быть???
Использую стандартную ATL обертку CCommand<CAccessor<...> >
Перед записью задаю нулевой статус, все как положено:
m_dwFieldStatus = DBSTATUS_S_ISNULL;
...
Table.SetData();
но аксесу всё по барабану и предыдущее значение остается как ни в чем не бывало. В чем дело? Как же все-таки перезаписать значение в базе?
Здравствуйте, 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'а это фиксилось.
Здравствуйте, 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 тут не исключение), к сожалению детально не помню... нужно читать мануалы.