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 1 von 3  1 23      
Walter Landwehr

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

2 Datenbanken abgleichen

  Alt 12. Feb 2015, 22:06
Datenbank: Firebird • Version: 2.5.2 • Zugriff über: IBO
Hallo,

gibt es eine Möglichkeit 2 Tabellen so abzugleichen das die Struktur einzelner Tabellen gleich sind. Die Felder der Tabellen sollen die gleichen Reihenfolge haben. So kann man per Schleife die Daten von Quelle in das Ziel schaufeln.

Vielen Dank für mögliche Lösungsvorschläge.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: 2 Datenbanken abgleichen

  Alt 12. Feb 2015, 22:42
http://www.firebirdsql.org/refdocs/l...ter-table.html - ALTER COLUMN: POSITION now 1-based

Es gibt auch Tools für die Datenbank-Verwaltung/Synchronisation, welche unter Anderem auch den Abgleich der Struktur ermöglichen.



Wenn du aber die Struktur nicht sicherstellen kannst (was eigentlich nie der Fall ist), dann ist es besser immer mit Feldnamen zu arbeiten.

Alternativ gehst du über über zwei Query/Table-Komponenten.
Auf beiden Seiten SELECT * FROM ... und dann über die DataSet.Fields laufen, in dem anderen Query FindField, Value übergeben und POST und fertig.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Feb 2015 um 22:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: 2 Datenbanken abgleichen

  Alt 12. Feb 2015, 22:47
[gelöscht]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Walter Landwehr

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

AW: 2 Datenbanken abgleichen

  Alt 12. Feb 2015, 23:08
Hallo himitsu,

hört sich schon ganz gut an, hast Du eventuell einen Code-Schnipsel, um mir auf die Sprünge zu helfen.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: 2 Datenbanken abgleichen

  Alt 12. Feb 2015, 23:21
Hallo,

gibt es eine Möglichkeit 2 Tabellen so abzugleichen das die Struktur einzelner Tabellen gleich sind. Die Felder der Tabellen sollen die gleichen Reihenfolge haben. So kann man per Schleife die Daten von Quelle in das Ziel schaufeln.

Vielen Dank für mögliche Lösungsvorschläge.
Ich vermute mal, daß in den zwei Tabellen (in unterschiedlichen Datenbanken) ähnliche Daten enthalten sind. Da würde es sich anbieten zwei Abfragen aufzusetzen deren Ergebnis Daten gleicher Struktur sind. Diese kannst Du miteinander vergleichen und ggf. Updates/Inserts durchführen.

Wie hier schon vor kurzem Ausgeführt wurde, Datenbanken enthalten Daten-Mengen, darum verbietet sich ein direkter Vergleich von Datenbanktabellen, da die Daten dort nicht sicher in einer Ordnung vorliegen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#6

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 05:50
Alternativ gehst du über über zwei Query/Table-Komponenten.
Auf beiden Seiten SELECT * FROM ... und dann über die DataSet.Fields laufen, in dem anderen Query FindField, Value übergeben und POST und fertig.
Hallo..

Wenn Du nur die Feldtypen/Größen/Position prüfen willst, dann nimm 2 Qerys mit Select * und dann kannst Du einen einfachen Vergleich über die Fields-Properties der beiden Querys machen..

Bei Ado habe ich dort neben FieldName noch Size, Precision und klar den FieldType..

Holger
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 07:47
Die exakte Struktur gleichst Du am besten über die Tabellen Create Anweisungen ab, am besten gleich mit Indizes und Triggern und Constraints.
2x für jedes System auslesen und mit einem Diff Tool ansehen.
Die Reihenfolge der Spalten ist dabei eigentlich ziemlich uninteressant, zumindest für die Funktion der Tabellen.
Der Abgleich soll nach welchen Kriterien erfolgen? "Von der Quelle zum Ziel schaufeln" klingt so etwas nach, eigentlich soll Ziel eine Kopie von Quelle sein. Wenn das so ist, exportiere die Tabelle des Quellsystems und erstelle sie im Zielsystem über den Export neu. Damit fällt natürlich auch der Strukturabgleich weg.
Gruß, Jo
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 08:25
Hallo,
auf der Suche bin ich auf anliegendes Tool Interbase Restructurer gestoßen.
http://sourceforge.net/projects/ibrest/

und hier zum Source
http://sourceforge.net/projects/ibre...d?source=files
denke die hilft dir weiter
mfg wf
  Mit Zitat antworten Zitat
Walter Landwehr

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

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 08:45
Hallo,

also ich möchte Daten einer bestehenden Datenbank in eine neue Datenbank übernehmen. Es geht hier um ein Programmupdate wobei das Update ohne Einwirkung des Anwenders funktionieren sollte.

Zur Zeit versuche ich es so.

Delphi-Quellcode:
procedure TfrmUebernahme.Optionen;
var i, Saetze : Integer;
begin
  if cbxOptionen.Checked then
  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;
    for i := 0 to Query_Quelle.fieldcount -1 do
    begin
       Query_Ziel.Fields[i].asvariant := Query_Quelle.Fields[i].asvariant;
    end;
    Query_Ziel.post;
    dmMain.ibqryOptionen.Refresh;
  end;
end;
Bei diesen Code hat die Tabelle nur einen Datensatz.

Das funktioniert auch ganz gut. Nur wenn die Struktur unterschiedlich ist knallt es. Ich werde mich mal an
die Lösung von himitsu wagen. Der Ansatz sieht gut.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#10

AW: 2 Datenbanken abgleichen

  Alt 13. Feb 2015, 09:05
Ich hatte gedcht, daß die Teile mit "..." Punkten eventuell schon bekannt sind.

Query_Quelle.SQL.Add('select * from TBL_OPTIONEN'); // läd ALLES
Also z.B. mit while not Query_Quelle.Eof do ... drüberlaufen und alle Datensätze durchlaufen.

Und nun entweder Query_Ziel.SQL.Add('select * from TBL_OPTIONEN'); // läd ALLES und dann vor dem Bearbeiten mit Query_Ziel.Locate den zugehörigen Datensatz auswählen
oder über Query_Ziel.SQL.Add('select * from TBL_OPTIONEN where EINE_ID = :ID'); Query_Ziel.ParamByName('ID').Value := Query_Quelle.FieldByName('EINE_ID').Value; jeweils nur den passenden Zieldateisatz laden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 09:30 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