Mein Tipp:
Im AfterOpen eines Datensatzes XY zerstörst Du alle persistenten Felder dieses Datensatzes und weisst Sie anschließend neu zu. So etwa
Delphi-Quellcode:
Procedure TMyDataModule.MyDatasetAfterOpen(Dataset : TDataset);
Begin
if not MyDatasetInitialized then begin
MyDatasetField1.Free;
...
MyDatasetField99.Free;
MyDatasetInitialized := True;
end;
MyDatasetField1 := MyDataSet['Field1'];
...
MyDatasetField99 := MyDataSet['Field99'];
End;
Das für jedes Dataset und -wupps- hast Du die richtigen Längen und(!) keine weitere Änderungen bei dir im Code.