本人想实现以下效果,请高手指教:
在dbgrideh中输时间格式化为 ____:__:__,最前面代表小时,中间为分,最后为秒.但存入数据库时要化成以秒为单位存入.同样,如果查询时,将数据库以秒为单位的数据转化成小时:分钟:秒的格式显示在dbgrideh中.
例如在输入时为:  0011:02:02,存入数据库应为 39722,但在查询时应显示为:0011:02:02.
也就是说,只要是在dbgrideh中显示还是输入都是0011:02:02格式,但存入数据库为秒数.

解决方案 »

  1.   

    uses DateUtils;var
    a:tdatetime;
    b:string;
    begin
    b:='11:02:02';
    a:=StrToDateTime(b);
    showmessage(intToStr(SecondOfTheDay(a)));
    showmessage(FormatDateTime('hh:nn:ss',a));
    end;
      

  2.   

    要处理3个地方:假设你的字段名是f1:
    1。
    procedure TForm1.ADOQuery1f1GetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    var
      A,B,C:Integer;
    begin
      A:=Sender.AsInteger div 3600;
      B:=(Sender.AsInteger-A*3600) div 60;
      C:=Sender.AsInteger-A*3600-B*60;
      if (A<>0)or(B<>0)or(C<>0) then
        Text:=Format('%.4d:%.2d:%.2d',[A,B,C])
      else Text:='';
    end;2。
    procedure TForm1.ADOQuery1f1SetText(Sender: TField; const Text: String);
    var
      A,B,C:Integer;
    begin
      A:=StrToInt(Copy(Text,1,4));
      B:=StrToInt(Copy(Text,6,2));
      C:=StrToInt(Copy(Text,9,2));
      Sender.AsInteger:=A*3600+B*60+C;
    end;3。
      DBGridEh1.FindColumn('F1').EditMask:='0000:00:00';