Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#19

AW: Daten von Access nach MSSQL kopieren

  Alt 11. Jul 2012, 05:05
@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).
  Mit Zitat antworten Zitat