gpt4 book ai didi

delphi - 将数据类型 ftFloat 转换为 ftBCD

转载 作者:行者123 更新时间:2023-12-03 15:22:06 28 4
gpt4 key购买 nike

如何将字段类型从 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 是为 DataType 创建的 Tfield 的只读属性。这是通过 Fielddefs 使用 DefaultFieldClasses 完成的:来自 DB 的 TFieldClass 的 array[TFieldType]。如果您需要更改数据类型,则必须释放字段并创建另一个适合您需求的字段。下面显示了如何完成此操作的示例。

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;

关于delphi - 将数据类型 ftFloat 转换为 ftBCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25780907/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com