Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразования типа TDateTime [D5, dBase, FoxPro]


Nax ©   (2004-03-10 17:46:00) 

Если в таблице dBase-IV есть поле типа Date и оно содержит некоторую валидную дату, как можно программно обнулить это поле? (например, если поле обозначает дату смерти, а никто еще не умер и дата занесена туда ошибочно).

Устроено так:

Таблица выводится в Грид.
Редактирование в Гриде запрещено. Для этого есть отдельная форма с компонентами Edit.
При редактировании данные считываются посредством
DateToStr(Field.Value)  в RxDateEdit.text и там редактируются.

Симптомы:

Если в Edit.text стереть значение даты и попытаться сделать
Field.Value := StrToDate(RxDateEdit.text) , то возникает ошибка валидности даты. Понятно, что строка '' - не есть дата.
Строка '  .  .    ' - тоже не есть дата.

Но как тогда программно обнулить дату в поле?
DBEdit не предлагать.

Как вообще можно проинициализировать переменную пуcтой датой,
чтобы потом закинуть ее значение в поле?
Типа, как в FoxPro:     date1 = CTOD('  .  .    ')

Возможно ли?

Или дата в Делфи не может быть ПУСТОЙ В ПРИНЦИПЕ?

Может у кого примерчик завалялся на эту тему......

Спасибо за внимание!


Johnmen   (2004-03-10 18:52:00) [1]

Кстати,
if rxDateEdit.Date=0 then ...


Johnmen   (2004-03-10 18:49:00) [2]

if Field.IsNull then ...


Nax   (2004-03-10 18:47:00) [3]

Спасибо,  Reindeer Moss Eater, помогло!
Я сделал так:

IF rxDateEdit.text='  .  .    ' THEN Field.Clear ELSE Field.Value:=StrToDate(rxDateEdit.text);

Поле в таблице обнуляется (абсолютная пустота).
Теперь, если считывать эту запись в форму для редактирования, то эти пустые поля попадают в rxDateEdit.text в виде '30.12.1899'

Напрашивается обратное решение:

IF DateToStr(Field.Value)='30.12.1899' THEN rxDateEdit.text:='  .  .    ' ELSE rxDateEdit.text:=DateToStr(Field.Value);

Есть ли более элегантные решения?

Как еще можно определить, что поле содержит пустую дату, кроме как проверяя условие: DateToStr(Field.Value)='30.12.1899'
и однозначно ли это говорит о том, что дата пуста?
( для SELECT )


Reindeer Moss Eater   (2004-03-10 17:47:00) [4]

TField.Clear


Наверх

Титульная страница Поиск, карта сайта Написать письмо