AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi 2 Datenbanken abgleichen
Thema durchsuchen
Ansicht
Themen-Optionen

2 Datenbanken abgleichen

Ein Thema von Walter Landwehr · begonnen am 12. Feb 2015 · letzter Beitrag vom 15. Feb 2015
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 09:15
Also, man ist sehr gut beraten, wenn die Datenbankstruktur ihren eigenen Versionsstand kennt, bzw. diesen irgendwie dort ablegt.

Für die Update-Orgie stellt man nun Skripts zusammen, die die Datenbankstruktur von Version X auf Version Y bringen können.

Jetzt wird auf einmal alles einfach:
  • Frage nach der Version
  • Suche Skript zu dieser Version
  • Kein Skript gefunden, dann raus hier
  • Führe Skript aus
  • Alles nochmal von vorne
Ganz zum Schluss wird einfach nochmal die Probe gemacht, ob die Struktur jetzt tatsächlich auf der benötigten Version ist.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 09:19
Hallo himitsu,

bei dem Beispiel Code handelst es sich um eine Tabelle mit nur einen Datensatz. Das Problem ist das die Quell-Struktur unter Umständen anders ist wie die Ziel-Struktur, d.h. Felder können an anderer Position sein und dann funktioniert meine Schleife nicht.
Delphi-Quellcode:
 for i := 0 to Query_Quelle.fieldcount -1 do
     begin
        Query_Ziel.Fields[i].asvariant := Query_Quelle.Fields[i].asvariant; // hier ist das Problem.
     end;
     Query_Ziel.post;
Feld 10 könnte in Ziel an Position 11 sein und unterschiedliche Feldwerte wie Boolean und Integer sein.

Das ist mein Problem.
Walter Landwehr
Mfg

Walter

Geändert von Walter Landwehr (13. Feb 2015 um 09:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 09:23
Gehe doch lieber über den Feldnamen, die Reihenfolge der Felder innerhalb einer Tabelle ist dann egal.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 09:27
Hallo baumina,

hast Du mal ein Beispiel?
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#15

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 09:33
Mach dir doch nicht so einen Stress und benutze CopyFields.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 09:38
Delphi-Quellcode:
for i := 0 to Query_Quelle.fieldcount -1 do
begin
  ZielFeld := Query_Ziel.FieldByName(Query_Quelle.Fields[i].FieldName);
  If Assigned(ZielFeld) then
  begin
    ZielFeld.asvariant := Query_Quelle.Fields[i].asvariant;
  end;
end;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 10:46
Hallo Uwe,

CopyFields funktioniert bei mir nicht so richtig.

Delphi-Quellcode:
procedure TfrmUebernahme.Optionen;
//procedure CopyRecord(dsSource, dsTarget: TDataSet);
    var varCopyData: Variant;
     i: Integer;
   begin
    Query_Quelle.Close;
    Query_Quelle.SQL.Clear;
    Query_Quelle.SQL.Add('select * from TBL_OPTIONEN');
    Query_Quelle.Open;
    Query_Ziel.Close;
    Query_Ziel.SQL.Clear;
    Query_Ziel.SQL.Add('select * from TBL_OPTIONEN');
    Query_Ziel.Open;
    Query_Ziel.Edit;

   with Query_Quelle do
   begin
     varCopyData := VarArrayCreate([0, FieldCount-1], varVariant);
     for i := 0 to FieldCount-1 do
       varCopyData[i] := Fields[i].Value;
   end;

  with Query_Ziel do
   begin
// Insert;
    for i := 0 to FieldCount-1 do
       Fields[i].Value := varCopyData[i]; // Hier Knalls bei Feld 90.
   end;
   Query_Ziel.Post;
 end;
was mache ich denn falsch. Irgendwie erkennt mein Code nicht die Feldreihenfolge.

Und was ist wenn das Ziel neue Felder hat. Es sollen natürlich nur die alten Einträge übernommen werden.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 10:55
Was genau funktioniert bei AnzFelderKopiert := Query_Ziel.CopyFields(Query_Quelle); nicht?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#19

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 10:57
CopyFields funktioniert bei mir nicht so richtig.
Was funktioniert denn nicht? Eigentlich iteriert CopyFields die Felder der Quelldatenbank, sucht das gleichnamige Feld in der Zieldatenbank und weist dann die Value-Werte zu (entspricht AsVariant).

Delphi-Quellcode:
procedure TfrmUebernahme.Optionen;
begin
  Query_Quelle.Close;
  Query_Quelle.SQL.Clear;
  Query_Quelle.SQL.Add('select * from TBL_OPTIONEN');
  Query_Quelle.Open;
  Query_Ziel.Close;
  Query_Ziel.SQL.Clear;
  Query_Ziel.SQL.Add('select * from TBL_OPTIONEN');
  Query_Ziel.Open;
  Query_Ziel.Edit; // oder Append/Insert, wenn noch kein Datensatz da ist
  Query_Ziel.CopyFields(Query_Quelle);
  Query_Ziel.Post;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 11:33
OK zunächst mal Danke für Eure Antworten, muss jetzt leider bis Sonntag außer Haus. Melde mich dann am Sonntag wieder und berichte über das Ergebnis.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 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