Когато aDataSet не е Active, aDataSet.FieldDefs.Count е 0 и няма как да стане :(
{}procedure FieldDefs_ToFieldsNew(aOwner: tComponent; aDataSet: tdataSet);
var
k : integer;
xFieldDef : tFieldDef;
xTTField : TFieldClass;
xField : tField;
begin
if (aOwner<>nil) and (aDataSet<>nil) then begin
// aDataSet.Open;
aDataSet.Fields.Clear;
k:=0;
while k<aDataSet.FieldDefs.Count do begin
xFieldDef := aDataSet.FieldDefs[k];
xTTField := DefaultFieldClasses[xFieldDef.DataType];
if xTTField<>nil then begin
xField := xTTField.Create(aOwner);
if xField<>nil then begin
with xField do begin
Name := xFieldDef.Name;
FieldName := xFieldDef.Name;
DataSet := aDataSet;
if xFieldDef.DataType in ftFixedSizeTypes then begin
Size := 0;
end else begin
Size := xFieldDef.Size;
end;
end;
end;
// aDataSet.Fields.Add(xField);
end;
inc(k);
end;
{ aDataSet.Close;
k:=0;
while k<aDataSet.Fields.Count do begin
xField := aDataSet.Fields[k];
if xField<>nil then begin
with xField do begin
DataSet := aDataSet;
end;
end;
inc(k);
end;
aDataSet.Open;
{}
end;
end;