Bei kleinen
DB hat sich bei mir folgender Ansatz bewährt:
- Erzeuge die
DB (intern und dynamisch) immer neu (hier CDS).
- Öffne die gespeicherte
DB (hier tempCDS).
- Kopiere die Felder etwa so:
Delphi-Quellcode:
begin
tempCDS := TClientDataset.Create(nil);
sl := TStringList.Create;
try
tempCDS.LoadFromStream(aStrStream);
tempCDS.Open;
sl.Text := tempCDS.FieldList.Text;
while not tempCDS.Eof do
begin
CDS.insert;
for i := 0 to CDS.FieldCount - 1 do
begin
s := CDS.Fields[i].FieldName;
if sl.IndexOf(s) > -1 then
CDS.FieldByName(s).Value := tempCDS.FieldByName(s).Value;
end;
CDS.post;
tempCDS.Next;
end;
tempCDS.Close;
finally
sl.free;
tempCDS.Free;
end;
Vorteil dieser Methode: Man übernimmt, was nur geht und lässt weg, was nicht mehr geht. Natürlich kann man den Ansatz auch etwas anpassen und zuvor erst einmal so den Strukturunterschied feststellen, den Anwender fragen, was zu tun ist, und entsprechend weiter gehen.