![]() |
Datenbank: Firebird • Version: 2.5.2 • Zugriff über: IBO
2 Datenbanken abgleichen
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. |
AW: 2 Datenbanken abgleichen
![]() 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
XML-Code:
und dann über die DataSet.Fields laufen, in dem anderen Query FindField, Value übergeben und POST und fertig.
SELECT * FROM ...
|
AW: 2 Datenbanken abgleichen
[gelöscht]
|
AW: 2 Datenbanken abgleichen
Hallo himitsu,
hört sich schon ganz gut an, hast Du eventuell einen Code-Schnipsel, um mir auf die Sprünge zu helfen. |
AW: 2 Datenbanken abgleichen
Zitat:
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 |
AW: 2 Datenbanken abgleichen
Zitat:
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 |
AW: 2 Datenbanken abgleichen
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. |
AW: 2 Datenbanken abgleichen
Hallo,
auf der Suche bin ich auf anliegendes Tool Interbase Restructurer gestoßen. ![]() und hier zum Source ![]() denke die hilft dir weiter |
AW: 2 Datenbanken abgleichen
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:
Bei diesen Code hat die Tabelle nur einen Datensatz.
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; 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. |
AW: 2 Datenbanken abgleichen
Ich hatte gedcht, daß die Teile mit "..." Punkten eventuell schon bekannt sind.
Delphi-Quellcode:
Query_Quelle.SQL.Add('select * from TBL_OPTIONEN'); // läd ALLES
Also z.B. mit
Delphi-Quellcode:
drüberlaufen und alle Datensätze durchlaufen.
while not Query_Quelle.Eof do ...
Und nun entweder
Delphi-Quellcode:
und dann vor dem Bearbeiten mit
Query_Ziel.SQL.Add('select * from TBL_OPTIONEN'); // läd ALLES
Delphi-Quellcode:
den zugehörigen Datensatz auswählen
Query_Ziel.Locate
oder über
Delphi-Quellcode:
jeweils nur den passenden Zieldateisatz laden.
Query_Ziel.SQL.Add('select * from TBL_OPTIONEN where EINE_ID = :ID'); Query_Ziel.ParamByName('ID').Value := Query_Quelle.FieldByName('EINE_ID').Value;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz