Следующая статья: Восстановление записи dBASE.
При отображении TDateTimeField в DBGrid с форматированием hh:mm (для показа только времени), любая попытка изменения времени приводит (при передаче данных) к ошибке примерно такого содержания: «'07:00' is not a valid DateTime». Как переслать данные в виде: Trunc(oldDateTimevalue)+StrToTime(displaytext)?
Следующий обработчик событий – TDateTimeField.OnSetText – не слишком элегантен, но он работает.
Предположим, что имеется маска редактирования, допускающая формат hh:mm или hh:mm:ss. Тогда процедура будет иметь следующий вид:
procedure TForm1.Table1Date1SetText(Sender: TField; const Text: String);
var d: TDateTime;
t: string;
begin
t:=Text;
with Sender as TDateTimeField do
begin
if IsNull then d:=SysUtils.Date else d:=AsDateTime;
AsDateTime:=StrToDateTime(Copy(DateToStr(d),1,10)+''+t);
end;
end;
Примечание: Функция Copy как раз и формирует постоянную дату (в формате dd/mm/yyyy), которая автоматически вводится в поле, t – вводимое время.