Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi 2 Datenbänke abgleichen (https://www.delphipraxis.net/56610-2-datenbaenke-abgleichen.html)

robby3 8. Nov 2005 17:47

Datenbank: dBase • Zugriff über: Table

2 Datenbänke abgleichen
 
Hallo zusammen, :-D
ich möchte 2 Table Datenbänke vergleichen, die gleiche Felder und den gleichen Index haben. Sollte beim vergleichen ein Feld einen anderen wert haben so soll er den wert der 1. Table Datenbank annehmen.
Hier habe ich mein Code. :gruebel:
Delphi-Quellcode:
while not table3.Eof do
   begin
   table2.append;
   for cop := 0 to Table3.fieldcount -1 do
   try table2.fields[i].assign(table3.fields[i]) except end;
  table2.post;
  table3.next;
end;
Der aber verändert nichts

Ich hoffe dass jemand einen Tipp für mich hat.
Mit freundlichen Grüßen
Robby :-D :-D :-D :-D

marabu 9. Nov 2005 10:10

Re: 2 Datenbänke abgleichen
 
Hallo Robby,

du hast zwei identisch aufgebaute dBase-Tabellen, die du über die Table-Komponenten Table3 und Table2 ansprichst. In dem von dir gezeigten Code fehlt eventuell das Positionieren auf den ersten Satz von Table3, bevor die Schleife abgearbeitet wird.

Du schreibst von einem Vergleich, aber dein Code enthält keinen Vergleich. Wenn ich deine Frage richtig verstehe, dann möchtest du anhand eines Schlüssels prüfen, ob jeder Datensatz aus Table3 auch in Table2 vorkommt. Existiert der Datensatz nicht, dann soll er erstellt werden, andernfalls sollen seine Nicht-Schlüsselfelder die Werte aus der Table3 annehmen. Habe ich das richtig verstanden?

Den Code könnte ich mir dann etwa so vorstellen:

Delphi-Quellcode:
procedure CopyValues(Source, Target: TDataSet);
var
  i: integer;
begin
  for i := 0 to Pred(Source.Fields.Count) do
    Target.Fields[i].Value := Source.Fields[i].Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // ...
  with Table3 do
  begin
    First;
    while not Eof do
    begin
      if Table2.Locate('YourKeyName', 'YourKeyValue', [])
        then Table2.Edit
        else Table2.Append;
      CopyValues(Table3, Table2);
      Table2.Post;
      Next;
    end;
  end;
end;
Grüße vom marabu

robby3 9. Nov 2005 16:56

Re: 2 Datenbänke abgleichen
 
Mein Problem habe ich mit Batchmove gelöst.
Ich Danke alle für eure Hilfe.
Robby :-D

Delphi-Quellcode:
with Batchmove1 do
begin
 Source     := Table3 ;
 Destination := Table2;
 Mode       := batAppendUpdate;
 execute;
end;
:bounce2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz