Datenbank Sync. Programmieren
Hallo liebe Administrator.de Community,
und zwar ich habe folgendes Problem:
Ich habe einen DVD-Verleihautomat der im Internet hängt. Dieser Verleihautomat hat als Datenbank eine Access Datenbank (97er).
Da ich gerne dafür eine Online Reservierung coden möchte, benötige ich folgendes:
1. eine Art WebSync mit der ich in Echtzeit am DVD-Verleihautomaten die Access Datenbank überwachen kann, sobald sich was ändert soll dann automatisch dieser Datensatz mit einer MySQL Datenbank im Internet gesyncht werden.
2. der steigt per PHP und dieser gesynchten MySQL DB auf die Onlinereservierung ein, und reserviert einen Film (DB Struktur ist ganz einfach: Kunden,Filme).
Jetzt müsste ich eben erreichen das wenn der Kunde sich einen verfügbaren Film reserviert, das dann sofort der WebSync Client am DVD-Verleihautomaten einen Eintrag im Automaten macht.
Ingesamt dauert eine komplette Sync. 10 Minuten (mit den einer 2Mbit Leitung).
D.h. wenn ein Kunde den reserviert, und aber vor Ort innerhalbt von diesen 10 Minuten sich ein anderer Kunde diesen Film abholt, gibts eine Kollision.
Deswegen würde ich so etwas gerne programmieren.
- Wie kann ich überprüfen was in Echtzeit gerade auf dieser Access Datenbank geändert worden ist? Geht das überhaupt?
- Wie kann ich das erreich wenn der Kunde im Internet auf "Film reservieren" klickt, der Automat innerhalb von Sekunden diese Flag auch in der AccessDatenbank setzt?
Ich hoffe ihr wisst was ich meine.
Eine andauernde Sync. würde immer im Zeitraum von 10 Minuten abgehandelt werden, deswegen müsste ich mir in dieser Hinsicht was einfallen lassen.
Es soll eine eigene Online Reservierung werden, zumindest war das so geplant.
Die Hersteller dieses Automaten gibt es leider nicht mehr, und somit auch keine Internetreservierung.
Ich hoffe ihr könnt mir helfen!
Ich habe auch bereits versucht direkt mit der AccessDatenbank zu verbinden, jedoch läuft das nicht so wie gewünscht (das der Kunde direkt per ASP Webserver Interface sich auf die Access verbindet), ... das dauert viel zu lange.
Gibt's vielleicht eine andere Möglichkeit direkt von der Online Reservierung mit der Automaten DB zu kommunizieren? Und leider nein, ich kann keine andere DB am Automaten verwenden... das ist leider ein veraltetes System
wo ich leider keinerlei Zugänge für neuartige Software habe, ... ich persönlich hätte das am liebsten mit MySQL gemacht, dann wäre das mit dem direkten Zugriff vom Internet auch nicht das Problem, ...!
PS mit welcher Software sollte ich das coden? C#, VB?
Vielen Dank!
glg Markus
und zwar ich habe folgendes Problem:
Ich habe einen DVD-Verleihautomat der im Internet hängt. Dieser Verleihautomat hat als Datenbank eine Access Datenbank (97er).
Da ich gerne dafür eine Online Reservierung coden möchte, benötige ich folgendes:
1. eine Art WebSync mit der ich in Echtzeit am DVD-Verleihautomaten die Access Datenbank überwachen kann, sobald sich was ändert soll dann automatisch dieser Datensatz mit einer MySQL Datenbank im Internet gesyncht werden.
2. der steigt per PHP und dieser gesynchten MySQL DB auf die Onlinereservierung ein, und reserviert einen Film (DB Struktur ist ganz einfach: Kunden,Filme).
Jetzt müsste ich eben erreichen das wenn der Kunde sich einen verfügbaren Film reserviert, das dann sofort der WebSync Client am DVD-Verleihautomaten einen Eintrag im Automaten macht.
Ingesamt dauert eine komplette Sync. 10 Minuten (mit den einer 2Mbit Leitung).
D.h. wenn ein Kunde den reserviert, und aber vor Ort innerhalbt von diesen 10 Minuten sich ein anderer Kunde diesen Film abholt, gibts eine Kollision.
Deswegen würde ich so etwas gerne programmieren.
- Wie kann ich überprüfen was in Echtzeit gerade auf dieser Access Datenbank geändert worden ist? Geht das überhaupt?
- Wie kann ich das erreich wenn der Kunde im Internet auf "Film reservieren" klickt, der Automat innerhalb von Sekunden diese Flag auch in der AccessDatenbank setzt?
Ich hoffe ihr wisst was ich meine.
Eine andauernde Sync. würde immer im Zeitraum von 10 Minuten abgehandelt werden, deswegen müsste ich mir in dieser Hinsicht was einfallen lassen.
Es soll eine eigene Online Reservierung werden, zumindest war das so geplant.
Die Hersteller dieses Automaten gibt es leider nicht mehr, und somit auch keine Internetreservierung.
Ich hoffe ihr könnt mir helfen!
Ich habe auch bereits versucht direkt mit der AccessDatenbank zu verbinden, jedoch läuft das nicht so wie gewünscht (das der Kunde direkt per ASP Webserver Interface sich auf die Access verbindet), ... das dauert viel zu lange.
Gibt's vielleicht eine andere Möglichkeit direkt von der Online Reservierung mit der Automaten DB zu kommunizieren? Und leider nein, ich kann keine andere DB am Automaten verwenden... das ist leider ein veraltetes System
wo ich leider keinerlei Zugänge für neuartige Software habe, ... ich persönlich hätte das am liebsten mit MySQL gemacht, dann wäre das mit dem direkten Zugriff vom Internet auch nicht das Problem, ...!
PS mit welcher Software sollte ich das coden? C#, VB?
Vielen Dank!
glg Markus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 152516
Url: https://administrator.de/forum/datenbank-sync-programmieren-152516.html
Ausgedruckt am: 13.04.2025 um 11:04 Uhr
7 Kommentare
Neuester Kommentar
Moin,
ich würde da gucken wie die DB-Struktur aussieht. Gibt es z.B. ein Änderungsdatum in der Quell-Tabelle (oder in beiden)? Wenn ja - wunderbar. Kleines Programm geschrieben welches nur eben beide DBs ausliest, vergleicht wo unterschiede in den Datumswerten sind und gut. Je nach Datenmenge kannst du das sogar recht flott hinbekommen:
a) Du kopierst von der Access-Tabelle alle Werte deren Änderungsdatum z.B. 1 Std. zurück liegt (oder 2 oder nen Tag...). Als Ziel nimmst du ne Heap-Tabelle auf deinem MySQL-Server (d.h. Tabelle nur im RAM packen!). Zusätzlich packst du noch ein Feld in diese Tabelle "Changed".
b) Du prüfst nach welche Daten aus dieser Tabelle aktueller sind als die in deiner normalen Arbeitstabelle. Dies geht mit dem Vergleich des Datumsfeldes ja sehr schnell. Jetzt aktuallisierst du schnell die Daten. Da es nen Automat ist gehe ich mal davon aus das sich da nicht mehr als 20-50 Datensätze in ner Std. ändern (da die Leute vor dem Automaten ja auch Zeit brauchen).
c) Als nächstes prüfst du nach welches deiner Felder in deiner MySQL-DB aktueller ist als das in deiner Heap-Tabelle (weil dann ist es automatisch auch aktueller als alle anderen Daten!). Nun nimmst du den Wert und kopierst den in die Heap-Tabelle. JETZT setzt du ne 1 auf das Changed-Flag (sonst ist das immer 0).
d) Jetzt spielst du das ganze zurück -> überall wo changed=1 ist weisst du das du den Datensatz in der Access-DB aktuallisieren musst.
Wenn du das ganze gut programmierst dann läuft das Script/Programm vermutlich weniger als 10 Sekunden - da du gar nicht soviele Änderungsdaten hast die sich da zwischenzeitlich geändert haben können... Man könnte das Prog nun jede Minute laufen lassen (dann brauchst auch nur die Daten der letzten 3 Minuten - falls das ding mal einen Datensatz nicht bekommen hat) oder sogar per Thread bauen (dann hast du nur einen Connect je DB und kannst den immer nutzen). Wenn das ding alle 5-10 Sekunden durchläuft dann hast du ja nahezu keine Chance auf doppel-Reservierungen da die Person am Automaten länger braucht um nen Film zu wählen...
ich würde da gucken wie die DB-Struktur aussieht. Gibt es z.B. ein Änderungsdatum in der Quell-Tabelle (oder in beiden)? Wenn ja - wunderbar. Kleines Programm geschrieben welches nur eben beide DBs ausliest, vergleicht wo unterschiede in den Datumswerten sind und gut. Je nach Datenmenge kannst du das sogar recht flott hinbekommen:
a) Du kopierst von der Access-Tabelle alle Werte deren Änderungsdatum z.B. 1 Std. zurück liegt (oder 2 oder nen Tag...). Als Ziel nimmst du ne Heap-Tabelle auf deinem MySQL-Server (d.h. Tabelle nur im RAM packen!). Zusätzlich packst du noch ein Feld in diese Tabelle "Changed".
b) Du prüfst nach welche Daten aus dieser Tabelle aktueller sind als die in deiner normalen Arbeitstabelle. Dies geht mit dem Vergleich des Datumsfeldes ja sehr schnell. Jetzt aktuallisierst du schnell die Daten. Da es nen Automat ist gehe ich mal davon aus das sich da nicht mehr als 20-50 Datensätze in ner Std. ändern (da die Leute vor dem Automaten ja auch Zeit brauchen).
c) Als nächstes prüfst du nach welches deiner Felder in deiner MySQL-DB aktueller ist als das in deiner Heap-Tabelle (weil dann ist es automatisch auch aktueller als alle anderen Daten!). Nun nimmst du den Wert und kopierst den in die Heap-Tabelle. JETZT setzt du ne 1 auf das Changed-Flag (sonst ist das immer 0).
d) Jetzt spielst du das ganze zurück -> überall wo changed=1 ist weisst du das du den Datensatz in der Access-DB aktuallisieren musst.
Wenn du das ganze gut programmierst dann läuft das Script/Programm vermutlich weniger als 10 Sekunden - da du gar nicht soviele Änderungsdaten hast die sich da zwischenzeitlich geändert haben können... Man könnte das Prog nun jede Minute laufen lassen (dann brauchst auch nur die Daten der letzten 3 Minuten - falls das ding mal einen Datensatz nicht bekommen hat) oder sogar per Thread bauen (dann hast du nur einen Connect je DB und kannst den immer nutzen). Wenn das ding alle 5-10 Sekunden durchläuft dann hast du ja nahezu keine Chance auf doppel-Reservierungen da die Person am Automaten länger braucht um nen Film zu wählen...
Moin iceget,
ist jetzt nicht destruktiv oder provozierend gemeint:
Warum nimmst du das nicht JETZT zum Anlass, den Quark nochmal neu runterzucoden?
Du sagst
Hau wech den Mist... was willst du denn da noch mit C#/.NET dranflanschen?!?
Grüße
Biber
ist jetzt nicht destruktiv oder provozierend gemeint:
Warum nimmst du das nicht JETZT zum Anlass, den Quark nochmal neu runterzucoden?
Du sagst
- im Netz hängt eine Access 97-MDB.... wir haben in paar Tagen 2011, dann ist das Format fast schon im besten Praktikantinnenalter.
- der Verzapfer der alten Appz ist in Rente oder weigert sich zu Recht, da noch was anzupassen
- die Datenstruktur ist so simpel wie es die Anforderung vermuten lässt.
Hau wech den Mist... was willst du denn da noch mit C#/.NET dranflanschen?!?
Grüße
Biber
naja - das problem is doch ganz simpel: Oft KANN man nicht einfach die DB wechseln...
Ich verstehe das so das der Automat gekauft wurde. Nun - schreibst du mal kurz ne neue Software für nen Automaten wo nicht nur der DB-Designer schon in Rente ist -> sondern auch die Konstrukteure, Entwickler usw.? Insbesondere wenn der Hersteller nicht mehr existiert (vermutlich weil der Klagen wg. der DB bekommen hat ^^ ;)) dürfte das schwer werden...
Also gilt die alte Weisheit: Musst du mit Pest und Cholera (oder - neudeutsch: Merkel und Regierung) leben -> dann arrangiere dich damit so gut es geht...
Ich verstehe das so das der Automat gekauft wurde. Nun - schreibst du mal kurz ne neue Software für nen Automaten wo nicht nur der DB-Designer schon in Rente ist -> sondern auch die Konstrukteure, Entwickler usw.? Insbesondere wenn der Hersteller nicht mehr existiert (vermutlich weil der Klagen wg. der DB bekommen hat ^^ ;)) dürfte das schwer werden...
Also gilt die alte Weisheit: Musst du mit Pest und Cholera (oder - neudeutsch: Merkel und Regierung) leben -> dann arrangiere dich damit so gut es geht...