Guten Morgen,
es ist mir erstmalig gelungen eine HSQLDB im Servermode zum Laufen zu bringen und mit BASE als Frontend darauf zuzugreifen.
Das ist schon mal Klasse!
Angenommen, ich habe zwei Benutzer, A und B, die zur gleichen Zeit mit der DB arbeiten.
Was muß ich tun, damit User A die Änderungen, die User B in die DB eingegeben hat, in Echtzeit im Formular sieht?
Gibt es eine Möglichkeit über die DB, quasi ein "hallo ich bin geändert, lade mich neu".
In der Doku der HSQLDB habe ich etwas von Triggern gelesen, aber bisher nicht verstanden ob das Thema überhaupt damit zu tun hat.
Oder muß ich vielleicht ein Makro mit Zeitschleife in jedes Formular legen, z.B. reload nach 30 Sekunden? Oder ganz anders?
Ich habe keine Ahnung, es wäre schön, wenn mir ein Profi da mal einen Tipp geben könnte.
Beste Grüße von Rik
Ich habe hier eine zweite Anfrage gestellt
[gelöst ]Multi User HSQLDB, Echtzeitanzeige im Servermode
Moderator: Moderatoren
[gelöst ]Multi User HSQLDB, Echtzeitanzeige im Servermode
Zuletzt geändert von F3K Total am Sa, 12.05.2012 12:00, insgesamt 2-mal geändert.
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Multi User HSQLDB, Echtzeitanzeige im Servermode
Hallo Rik
Eine konkrete Lösung kann ich leider nicht anbieten, bin aber der Meinung, das es über einen Trigger durchaus funktionieren könnte.
Unter folgendem Link hat es eine gute Erklärung zur Funktion von Triggern in Datenbanken allgemein:
http://www.it-academy.cc/article/1514/G ... ggern.html
Theorethisch müsste das dann wie folgt funktionieren:
Du erstellst einen Trigger, der auf die Ereignisse Delete, Insert und Update einer bestimmten Tabelle ein Reload aller Formulare durchführt.
Wie du einen Trigger in oo erstellst, habe ich jedoch keine Ahnung, aber bei dir habe ich keine Zweifel, dass du das hinbekommst.
In meinem MySQL 5 Buch hat es folgendes Beispiel:
CREATE TRIGGER name BEFORE|AFTER INSERT|UPDATE|DELETE ON tablename FOR EACH ROW code
Vielleicht kannst du damit etwas anfangen.
Viel Glück und Gruss
Beni
Eine konkrete Lösung kann ich leider nicht anbieten, bin aber der Meinung, das es über einen Trigger durchaus funktionieren könnte.
Unter folgendem Link hat es eine gute Erklärung zur Funktion von Triggern in Datenbanken allgemein:
http://www.it-academy.cc/article/1514/G ... ggern.html
Theorethisch müsste das dann wie folgt funktionieren:
Du erstellst einen Trigger, der auf die Ereignisse Delete, Insert und Update einer bestimmten Tabelle ein Reload aller Formulare durchführt.
Wie du einen Trigger in oo erstellst, habe ich jedoch keine Ahnung, aber bei dir habe ich keine Zweifel, dass du das hinbekommst.
In meinem MySQL 5 Buch hat es folgendes Beispiel:
CREATE TRIGGER name BEFORE|AFTER INSERT|UPDATE|DELETE ON tablename FOR EACH ROW code
Vielleicht kannst du damit etwas anfangen.
Viel Glück und Gruss
Beni
Re: Multi User HSQLDB, Echtzeitanzeige im Servermode
Hallo Rik
Bin mir doch nicht sicher, ob ein Trigger eine saubere Lösung ist. Du müsstest ja dann die Ereignisse UPDATE etc noch irgendwie in ein Makro überführen (ich nehme zumindest nicht an, dass man das Formular direkt aus einem SQL-Statement reloaden kann) und ich zweifle, ob das praktikabel ist.
Wenn es dir rein um die Anzeige der Daten geht, könntest du das wahrscheinlich am einfachsten mit deinem Ansatz der Zeitschleife und Reload lösen.
Eine weitere Möglichkeit wäre eventuell auch die Methode "Flush". Beispiel:
Person A erfasst einen neuen Datensatz und speichert diesen mittels Klick auf das Diskettensymbol. Dem Formular (Ereignis nach Datensatzaktion) ist ein Makro zugeordnet, das die Daten "Flushed". Jetzt ist der neue Datensatz sicher in der Datenquelle erfasst und somit könnten die Daten bei B durch einen Reload angezeigt werden.
Unter dem Objekt DataSource gibt es nicht nur die Methode Flush, sondern auch Flushed (wahr oder falsch). Eigentlich bin ich der Meinung, dass der Status von Flushed sich auf True ändern müsste, sobald Person A gespeichert hat. Daraus wiederum müsste doch ein Makro ausgelöst werden können, das dann das Formular von Person B neu lädt.
Ich nehme an, die Methode Flush kennst du, falls nicht, hätte ich da ein Makro, das ich dir geben könnte. Das funktioniert genau wie beschrieben.
Der 2. Absatz mit dem Flushed ist jedoch reine Theorie von mir. Aber du bist ja genug Kompetent, um zu beurteilen, ob du das weiter verfolgen möchtest.
Falls du auch noch die ganze Dateneingabe von A und B regeln möchtest oder musst, ist meines Erachtens keiner der obigen Lösungsansätze befiedigend.
In diesem Fall ginge der Ansatz wohl eher in Richtung Transaktionen oder Lock Table(s). Ob und wie diese Methoden in oo funktionieren, kann ich aber nicht sagen.
Gruss
Beni
Bin mir doch nicht sicher, ob ein Trigger eine saubere Lösung ist. Du müsstest ja dann die Ereignisse UPDATE etc noch irgendwie in ein Makro überführen (ich nehme zumindest nicht an, dass man das Formular direkt aus einem SQL-Statement reloaden kann) und ich zweifle, ob das praktikabel ist.
Wenn es dir rein um die Anzeige der Daten geht, könntest du das wahrscheinlich am einfachsten mit deinem Ansatz der Zeitschleife und Reload lösen.
Eine weitere Möglichkeit wäre eventuell auch die Methode "Flush". Beispiel:
Person A erfasst einen neuen Datensatz und speichert diesen mittels Klick auf das Diskettensymbol. Dem Formular (Ereignis nach Datensatzaktion) ist ein Makro zugeordnet, das die Daten "Flushed". Jetzt ist der neue Datensatz sicher in der Datenquelle erfasst und somit könnten die Daten bei B durch einen Reload angezeigt werden.
Unter dem Objekt DataSource gibt es nicht nur die Methode Flush, sondern auch Flushed (wahr oder falsch). Eigentlich bin ich der Meinung, dass der Status von Flushed sich auf True ändern müsste, sobald Person A gespeichert hat. Daraus wiederum müsste doch ein Makro ausgelöst werden können, das dann das Formular von Person B neu lädt.
Ich nehme an, die Methode Flush kennst du, falls nicht, hätte ich da ein Makro, das ich dir geben könnte. Das funktioniert genau wie beschrieben.
Der 2. Absatz mit dem Flushed ist jedoch reine Theorie von mir. Aber du bist ja genug Kompetent, um zu beurteilen, ob du das weiter verfolgen möchtest.
Falls du auch noch die ganze Dateneingabe von A und B regeln möchtest oder musst, ist meines Erachtens keiner der obigen Lösungsansätze befiedigend.
In diesem Fall ginge der Ansatz wohl eher in Richtung Transaktionen oder Lock Table(s). Ob und wie diese Methoden in oo funktionieren, kann ich aber nicht sagen.
Gruss
Beni
Re: Multi User HSQLDB, Echtzeitanzeige im Servermode
Hallo Beni,
mit dem addflushlistener habe ich mich den ganzen Abend beschäftigt, hat leider bisher nicht zum Erfolg geführt. In dem Datanbankdokument, von wo aus ich den Befehl .flush ausführe wird auch das event .flushed erkannt, leider nicht im zweiten.
Momentan stehe ich noch auf dem Schlauch, es wird wohl tatsächlich auf eine zeitgesteuerte Schleife hinauslaufen. Ich hätte halt gerne gewußt, wie Profis das machen, denn eine Schleife finde ich alles andere als schön.
Gruß Rik
mit dem addflushlistener habe ich mich den ganzen Abend beschäftigt, hat leider bisher nicht zum Erfolg geführt. In dem Datanbankdokument, von wo aus ich den Befehl .flush ausführe wird auch das event .flushed erkannt, leider nicht im zweiten.
Momentan stehe ich noch auf dem Schlauch, es wird wohl tatsächlich auf eine zeitgesteuerte Schleife hinauslaufen. Ich hätte halt gerne gewußt, wie Profis das machen, denn eine Schleife finde ich alles andere als schön.
Gruß Rik
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Multi User HSQLDB, Echtzeitanzeige im Servermode
Guten Tag,
ich habe eine Lösung für mein Problem gefunden, mit einem Timer, aber nicht mit einer loop mit wait in Starbasic.
Die beeinfußt nämlich alle anderen Makros negativ, ein weiteres wait in einem anderen Makro ist dann unmöglich, irgendwie kommt das Zeitmanagement von Starbasic mit einer solchen Schleife durcheinander.
Die Lösung habe ich hier gefunden:
http://www.oooforum.org/forum/viewtopic.phtml?t=59763
Da läuft ein Beanshellscript als Timer
Grüße Rik
ich habe eine Lösung für mein Problem gefunden, mit einem Timer, aber nicht mit einer loop mit wait in Starbasic.
Die beeinfußt nämlich alle anderen Makros negativ, ein weiteres wait in einem anderen Makro ist dann unmöglich, irgendwie kommt das Zeitmanagement von Starbasic mit einer solchen Schleife durcheinander.
Die Lösung habe ich hier gefunden:
http://www.oooforum.org/forum/viewtopic.phtml?t=59763
Da läuft ein Beanshellscript als Timer
Grüße Rik
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO