delphi – 将数据类型ftFloat转换为ftBCD
发布时间:2020-12-15 09:35:00 所属栏目:大数据 来源:网络整理
导读:如何将字段类型从ftFloat转换为ftBCD; 我试过了 for i := 0 to FDataSet.FieldCount - 1 do begin if FDataSet.Fields.Fields[i].DataType = ftFloat then begin FDataSet.Fields.Fields[i].DataType := ftBCD; end;end; 但是我得到了错误 [DCC Error] E2129
如何将字段类型从ftFloat转换为ftBCD;
我试过了 for i := 0 to FDataSet.FieldCount - 1 do begin if FDataSet.Fields.Fields[i].DataType = ftFloat then begin FDataSet.Fields.Fields[i].DataType := ftBCD; end; end; 但是我得到了错误 [DCC Error] E2129 Cannot assign to a read-only property 有没有办法可以将ftFloat的所有数据集字段转换为ftBCD? 解决方法
DataType是readonly为DataType创建的Tfield的属性.
这是从Fielddef使用DefaultFieldClasses:来自DB的TFieldClass的数组[TFieldType]完成的. 如果您需要更改DataType,您将需要Free the Field并根据您的需要创建另一个. 下面显示了如何做到这一点. type TMyFieldInfo = Record FieldName: String; Size: Integer; DataType: TFieldType; FieldKind: TFieldKind; end; type TFA= Array of TMyFieldInfo; Procedure GetFields(DS:Tdataset;var FA:TFA); var I: Integer; begin SetLength(FA,DS.FieldCount); for I := 0 to DS.FieldCount - 1 do begin FA[I].FieldName := DS.Fields[I].FieldName; FA[I].DataType := DS.Fields[I].DataType; FA[I].Size := DS.Fields[I].Size; FA[I].FieldKind := fkdata; end; end; Procedure SetFields(DS:Tdataset;var FA:TFA); var I: Integer; F:TField; begin DS.Fields.Clear; for I := Low(FA) to High(FA) do begin F := DefaultFieldClasses[FA[I].DataType].Create(DS); With F do begin FieldName := FA[I].FieldName; FieldKind := FA[I].FieldKind; Size := FA[I].Size; DataSet := DS; end; end; end; procedure TForm6.Button1Click(Sender: TObject); var L_FA: TFA; I:Integer; begin MyDS.Open; // open to get the Fielddefs. GetFields(MyDS,L_FA); MyDS.Close; // close to be able to change the fields for I := Low(L_FA) to High(L_FA) do begin if L_FA[i].DataType = ftFloat then L_FA[i].DataType := ftBCD; end; SetFields(MyDS,L_FA); MyDS.Open; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |