Zitat von
erich.wanker:
Mit 30
Query´s greife ich auf eine GDB zu..
Mit 30 weiteren Querys ...
Zwei Queries würden doch auch reichen.
Wenn du 30 Tabellen zu kopieren hast, dann kannst du doch jede Tabelle der Reihe nach kopieren.
Delphi-Quellcode:
// Quelltabelle öffnen
QuerySource.SQL.Text := 'SELECT * FROM '+tabellenname;
QuerySource.Open;
// Zieltabelle öffnen
QueryDest.SQL.Text := 'SELECT * FROM '+tabellenname + ' WHERE 0=1';
QueryDest.Open;
// Alle Datensätze kopieren
CopyDataSet(QuerySource, QueryDest);
Zum Kopieren aller Datensätze dient folgender Code:
Delphi-Quellcode:
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);
// mit TagMask kann gezielt das Kopieren best. Felder verhindert werden
// z.B. Autoinc-Felder
if Assigned(fDst) and ((fSrc.Tag and TagMask)=0) then
begin
fDst.Value := fSrc.Value;
end;
end;
end;
procedure CopyDataSet(Src,Dst: TDataSet);
begin
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;
Damit hast du jetzt das Handwerkszeug zum Kopieren einzelner Tabelle.
Wichtig ist auch noch die Reihenfolge in der die Tabellen kopiert werden.
Zuerst die "Haupttabelle" kopieren und danach die abhängigen Tabellen.