Цепочка...
TIBStringField = class(TWideStringField)
constructor TStringField.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
SetDataType(ftString);
end;
constructor TWideStringField.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
SetDataType(ftWideString);
end;
procedure TdxCustomMemData.LoadFromDataSet(DataSet : TDataSet);
function CanAssignTo(ASource, ADestination: TFieldType): Boolean;
begin
Result := ASource = ADestination; // ftString <> ftWideString
if not Result then
Result := (ASource = ftAutoInc) and (ADestination = ftInteger);
end;
var
i : Integer;
AField : TField;
mField: TdxMemField;
begin
...
while not DataSet.EOF do
begin
Append;
for i := 0 to DataSet.FieldCount - 1 do
begin
AField := FindField(DataSet.Fields[i].FieldName);
if(AField <> nil) and CanAssignTo(DataSet.Fields[i].DataType, AField.DataType) then
begin