我用dbedit显示时间,用adoquery动态查询,可是在显示时总是在时间前多显示个1899-12-30 ,我想把这多出的部分去调,查看了别的资料,见很多人介绍如下方法:
dbedit1.datasource.dataset.FieldByName('YourField').DisplayFormat := 'hh:mm:ss',我用的是delphi7,但fieldbyname就没有displayformat属性啊,这是怎么回事?
我虽然用如下方法也能解决,但要加到好几个地方,DBEdit1.Text:=formatdatetime('hh:mm:ss',DBEdit1.DataSource.DataSet.FieldByName('YourField').value);而且当我用鼠标点击到dbedit上后,1899-12-30 马上又显示出来了,我见有人用editmask方法,但好像其没法为时间字段设置格式,dbedit1.field.editmask:='hh:mm:ss'不管用,请大家帮忙解决一下,否则我只好换成Tedit控件了,虽然这样更省事,但我想知道DBEDIT怎么解决上述问题!谢谢

解决方案 »

  1.   

    双击你的数据集
    选择'YourField'字段,
    设置DisplayFormat属性为:hh:nn:ss
      

  2.   

    如果只是用于显示,可以在查询的时候用sql转换成字符串的形式就可以了,select left(convert(varchar(20), time_field, 114), 8) as time_field from your_table(sql server,详细的可看其联机帮助关于convert的说明)
      

  3.   

    见很多人介绍如下方法:
    dbedit1.datasource.dataset.FieldByName('YourField').DisplayFormat := 'hh:mm:ss',我用的是delphi7,但fieldbyname就没有displayformat属性啊,这是怎么回事?
    FieldByName('fieldname')返回一个TField类型
    DisplayFormat是FloatField,DateTimeField等字段所特有的,StringField类型没有的。
    所以FieldByName不会显示DisplayFormat,因为它返回的FloatField,DateTimeField等类的父类,没有这个属性。
    如果你依这个字段在Delphi里建一个固定字段,就会是TDateTimeField类型的,就会有DisplayFormat这个属性了。如果你要用FieldByName,你可以这样用:TDateTimeField(AdoQuery1.FieldByName('Field')).DisplayFormat:='hh:nn:ss'.
    这样的话,显示的时候就是hh:nn:ss了,但是编辑的时候还是会有前面的日期的。
      

  4.   

    如果想要在编辑的时候不显示日期:需要设置该字段的EditMask属性为'!90:00:00;1;_'即可。
    该属性为字符类型
    为TField类型所有,可以如下设置:
      ADOQuery1.FieldByName('Field').EditMask:='!90:00:00;1;_'
    或者在Delphi里建立固定字段,在该字段的这个属性里写入:!90:00:00;1;_,该属性默认是空值。
      

  5.   

    感谢mastersky(浪),你讲的很清晰,问题解决了!