![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos
Datenbanken abgleichen
Hallo allerseits!
Folgende Situation: Aussendienst arbeitet auf mehreren Notebooks mit einer Firebird-DB, welche lokal jeweils installiert ist, seine Angebote aus und speichert diese am Notebook lokal in der DB unter einer automatisch vorgegebenen Angebotsnummer (Serie ist unterschiedlich je Mitarbeiter). Wenn der Aussendienstmitarbeiter in seine Firma kommt, steckt er sein Notebook in eine Dockingstation und jetzt sollen die beiden identischen Datenbanken (Notebook und jene in der Firma) abgeglichen werden, d.h. jeweils die neueste Version jedes Angebotes soll auf beiden Geräten gespeichert werden. Gibt es hiezu überhaupt eine Möglichkeit, dies über SQL durchzuführen? Ich hoffe, ich konnte mich einigermassen verständlich ausdrücken. mfg Herbert |
Re: Datenbanken abgleichen
Unmittelbar geht es nicht, weil mit FB nicht aus einer DB heraus auf eine andere zugegriffen werden kann. Du musst es also per Programm lösen. Jürgen
|
Re: Datenbanken abgleichen
Hallo,
das läuft normlerweise über Replikation, es gibt für Firebird einen freien Replikator (google), da muss man sich nur anmelden. Die Replikation selber läuft nicht direkt per SQL, sondern über ein eigenes Programm (diesen Replikator) (also c++, Delphi, weiss nicht, ist kein open source). Das Grundprinzip ist "einfach" 1. Sorge für eindeutige Nummernkreise bei den Primärschlüsseln der einzelnen Datenbanken (geht bei Generatoren ja einfach) 1. DB beginnt z.B. bei 1, 2. DB bei 10 Mio, 3. DB bei 40 Mio. 2. Protokolliere alle Änderungen aller DB's Trigger, Protokolldatei 3. Trage alle Änderungen aller DB's in die jeweils anderen ein Probleme gibt es, wenn 1 Datensatz von zwei Nutzern "gleichzeitig" geändert wurde. Ausserdem mit unique Key (Auftragsnummer), dass hattest du aber über Serien ja schon gelöst. Wenn es hier "nur" darum geht, neue Angebote einzutragen, würde ich ein Synchronisationstool schreiben. Das fragt in der Haupt-DB nach, ob das jeweilige Angebot schon drinsteht, wenn nicht wird es eingetragen, wenn es drinsteht, wird auf Änderungen geprüft (synchronisiert). Positiv macht sich hier ebensfalls eine Protokolltabelle bemerkbar, wo im einfachsten Fall Datum, Tabellenname, prim key der Änderung drinsteht. Heiko |
Re: Datenbanken abgleichen
Ja, ok - für den Anfang wäre mir schon geholfen, wenn ich alle "neuen" Angebote einfach vom Notebook in die zentrale Firmendatenbank übertragen könnte. Wie gesagt, die beiden Datenbanken sind 1:1 aufgebaut und haben sowohl am Server als auch jeweils lokal den gleichen Namen.
Wie könnte so ein Synchronisationstool aussehen? Worauf muss ich hier achten? mfg Herbert |
Re: Datenbanken abgleichen
Hallo,
nun ja ;) Du hast ja bestimmt in deinem Programm ein Routine "Neues Angebot speichern", der du ein Datenklass (TOffer ?) übergeben kannst. Die erzeugt einen neuen Primärschlüssel (Generator), und trägt das Eingabit ein. Die Liste der Angebotspositionen (mit diesem neuen Primärschlüssel als Foreign key) wird dann ebenfalls gespeichert. Dein Programm muss jetzt in der Lage sein, ein Angebot aus der Lappi-DB auszulesen und in die Firmen-DB als neues Angebot zu speichern. Du benutzt also 2 ZConnections, zwei Queries (oder besser 2 TOfferDBClass, die mit je einer ZConnection verbunden sind). Wichtig wäre auf jeden Fall ein Protokoll (in beiden DBs (?), die das Insert-Protokollieren, auch denn du natürlich feststellen kannst, ob das Angebot schon drinsteht. Ausserdem würde ich ein Änderungsprotokoll mitführen, falls z.B. auf dem Lappi ein Angebot geändert wurde. Dann muss die Änderung in die Firmen-DB mit rein. Man kann es sich hier etwas einfacher, indem man die Firmen-DB als Master-DB betrachtet, die immer auf dem aktuellen Stand sein soll. Zuerst schiebt der Lappi die neuen Angebot in die Firmen-DB, dann holt er sich alle bisherigen Änderungen, die er selber noch nicht hat, aus der Firmen-DB (am einfachsten wäre ein Backup/Restore er Firmen-DB und Überschreiben der Laptop-DB). Auf der IBPhoenix-Homepage ist auch ein kleine Anleitung (für Replikation) Heiko |
Re: Datenbanken abgleichen
Hi
hier findest Du noch ein Sync Tool ![]() womöglich von interesse Shalom Manfred |
Re: Datenbanken abgleichen
Ich werde das ganze jetzt mal auf die "einfache" versuchen, indem ich alle Angebote vom Notebook zum Server schicke, wobei bestehende Datensätze am Server einfach überschrieben werden sollen. Irgendwo habe ich da noch ein Problem. Folgendes habe ich bereits gemacht:
Ich verwende je 1 ZConnection, 1 ZQuery und 1 Datasource sowohl für die lokale DB als auch für die serverseitige DB und selektiere dann mal die zu übersendenden Angebote mit:
Delphi-Quellcode:
Danach versuche in einer Schleife Datensatz für Datensatz zu übertragen:
ZQueryLokal.SQL.Text := 'SELECT * FROM ANBOTE WHERE ANBOTNR > 0';
Delphi-Quellcode:
Irgendwo habe ich hier ein Blackout. Vielleicht kann mir hier nochmals jemand Tipps geben.
ZQueryLokal.First;
while not ZQueryLokal.EOF do begin DataSourceServer.Dataset := DataSourceLokal.Dataset; // geht das überhaupt so, oder muss ich jede Feld separat übergeben? // wie kann ich jetzt das Dataset in die Server-Datenbank einfügen ? // ZQueryServer.SQL.Text := 'INSERT INTO ARTIKEL' funktioniert nicht ZQueryLokal.Next; end; mfg Herbert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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