如何控制TQuery 的字段显示格式(动态产生的TFeild没有DisplayFormat属性)?(50分)

  • 主题发起人 主题发起人 zhouyong
  • 开始时间 开始时间
既然你会动态生成tfeild,难道就不知道给tfeild附上displayformat吗?
倒.
 
动态生成TField是TQuery自己干的,我不知道怎么加上displayformat?请指教
 
在这几个类型中有DisplayFormat的属性
TAggregateField
TDateTimeField
TNumericField
 
在SQL语句中加上,不同数据库函数不同
 
to wangjb

能详细点吗
 
你的字段是什么类型的,只有TAggregateField,TDateTimeField,TNumericField
才可以设置displayFormat
比如: TNumericField
(Query1.FieldByName('字段名') as TNumericField).DisplayFormat!
 
if query1.fields.datatype in [ftFloat,ftCurrenty,ftBcd] then
begin
TNumericField(query1.field).displayformat:=###.##;
end;
 
  江维和yaya8163还有前面几位说的都正确。

  只有那几种字段类型有displayformat
  因为FieldByName('')的对应类是TField,所以应该把TField转换为实际的Field类型,
让后就可以赋值了。
 
一个例子:
//指定金额的两位小数
TNumericField(ADOquery1.FieldByName('金额')).DisplayFormat := '#.00';
 
<h1><font color="red"><strong>你控制的格式是什么类型的
如果是real 用floattostrf()
其他的上面的答案
</strong></font><h1>
 
我的这段就是动态产生的DisplayFormat,拿去用吧:
procedure TdmData.UpdateFieldFormats(DataSet: TDataSet);
const
defFloatFormat: string = ',0.00';
defDateFormat: string = 'yyyy-mm-dd';
defTimeFormat: string = 'hh:mm:ss';
defDateTimeFormat: string = 'yyyy-mm-dd hh:mm:ss';
var
I: Integer;
begin
for I := 0 to DataSet.FieldCount - 1 do begin
case DataSet.Fields.DataType of
ftFloat, ftCurrency, ftBCD:
begin
TNumericField(DataSet.Fields).DisplayFormat := defFloatFormat;
TNumericField(DataSet.Fields).EditFormat := '#.##';
end;
ftDate: TDateTimeField(DataSet.Fields).DisplayFormat := defDateFormat;
ftTime: TDateTimeField(DataSet.Fields).DisplayFormat := defTimeFormat;
ftDateTime: TDateTimeField(DataSet.Fields).DisplayFormat := defDateTimeFormat;
end;
end;
end;
 
非常感谢各位的帮助,分太少,就给最先对的一位和最热心的一位
 
多人接受答案了。
 
后退
顶部