Телефон: +7 (926) 245-03-63

Использование DateTime в DBGrid

Следующая статья: Восстановление записи 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 – вводимое время.

Интересное в интернете: Пожарные рукава ccskrf вести спорт.