@shmia, Sir Rufo: vielen Dank für die Hinweise. Aber die Frage ging in eine andere Richtung.
Wenn du 2 Datenbanken hast und alles von A nach B kopieren möchtest, ist es am Einfachsten die Datenbanken zuerst einmal in ihrer Struktur anzugleichen.
Im nächsten Schritt kannst du Tabelle für Tabelle in ihrem Inhalt kopieren.
Eine Funktion zu schreiben, die alle Datensätze einer Tabelle in eine strukturgleiche Tabelle in einer anderen
DB kopiert ist nicht so schwer.
Delphi-Quellcode:
{**************************************************************************
* NAME: CopyDataSetRecord
* DESC: Kopiert alle gleichnamigen Felder aus Src nach Dst.
* Dst.State muss in [dsEdit,dsInsert] sein, sonst wird ne
* Exception geschmissen.
* Es findet keinerlei Prüfung auf Datentypen statt!
*
* Mit TagMask kann das Kopieren von markierten Feldern des Quelldatasets
* verhindert werden.
*************************************************************************}
procedure CopyDataSetRecord(Src,Dst: TDataSet; TagMask:Integer=0);
var
i: Integer;
fSrc,fDst: TField;
begin
for i := 0
to Src.FieldCount-1
do
begin
fSrc := Src.Fields[i];
fDst := Dst.FindField(fSrc.FieldName);
if Assigned(fDst)
and ((fSrc.Tag
and TagMask)=0)
then
begin
fDst.Value := fSrc.Value;
end;
end;
end;
procedure DeleteAllRecords(ds: TDataSet);
begin
ds.DisableControls;
try
ds.First;
while not ds.Eof
do
ds.Delete;
finally
ds.EnableControls;
end;
end;
procedure CopyDataSet(Src,Dst: TDataSet);
begin
// zuerst alle Datensätze im Ziel löschen
DeleteAllRecords(Dst);
Src.First;
while not Src.Eof
do
begin
Dst.Append;
try
CopyDataSetRecord(Src,Dst);
Dst.Post;
except
Dst.Cancel;
raise;
end;
Src.Next;
end;
end;
Beim Kopieren der Tabellen gilt es die Reihenfolge zu beachten, da die Tabellen in einer relationalen Datenbank in bestimmten Abhängigkeiten stehen.
Man muss zuerst die Mastertabellen (z.B. Kundenstamm) kopieren und erst danach die Detailtabellen (z.B. Bestelldaten, die sich auf den Kundenstamm beziehen).