Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Speicherauslastung einzelner Komponenten

  Alt 11. Mär 2010, 17:36
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.
Andreas
  Mit Zitat antworten Zitat