Ereignishandling
- af0815
- Lazarusforum e. V.
- Beiträge: 6768
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Ereignishandling
Ein Datenbankserver sagt dir nicht ob such was geändert hat. Da gibt es bei den Sytemen die ich kenne nichts. Das ist in der Verantwortung des Programmieres in Multiuserumgebungen damit umzugehen. Dafür gibt es verschiedene Strategien.
Du bist in deiner Applikation, das sie sich die Informationen besorgt und sich die Events für die Forms und Komponenten erstellt. Manche Ereignisse bekommt man vom Betriebssystem, manche kann über zeitgesteuerte Abfragen erstellen. Das fällt unter Grundlagen der Programmierung auf aktuellen Betriebsystemen.
Du bist in deiner Applikation, das sie sich die Informationen besorgt und sich die Events für die Forms und Komponenten erstellt. Manche Ereignisse bekommt man vom Betriebssystem, manche kann über zeitgesteuerte Abfragen erstellen. Das fällt unter Grundlagen der Programmierung auf aktuellen Betriebsystemen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 368
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Ereignishandling
Doch. Gibt es. FireBird hat ein Event-System, was per Observer-Pattern implementiert ist (Glaub ich zumindest)af0815 hat geschrieben: Fr 7. Feb 2025, 07:48 Ein Datenbankserver sagt dir nicht ob such was geändert hat. Da gibt es bei den Sytemen die ich kenne nichts. Das ist in der Verantwortung des Programmieres in Multiuserumgebungen damit umzugehen. Dafür gibt es verschiedene Strategien.
https://wiki.freepascal.org/TFBEventMonitor
Und in SQLite gibts ne Hook-API die man registrieren kann
https://www.sqlite.org/c3ref/update_hook.html
Lauft am Ende auf nen eigenen Thread hinaus, der periodisch nach neuen "Daten" suchtDu bist in deiner Applikation, das sie sich die Informationen besorgt und sich die Events für die Forms und Komponenten erstellt. Manche Ereignisse bekommt man vom Betriebssystem, manche kann über zeitgesteuerte Abfragen erstellen. Das fällt unter Grundlagen der Programmierung auf aktuellen Betriebsystemen.
(oder einfach nen Timer auf der MainForm hat)
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 125
- Registriert: Fr 9. Aug 2013, 08:28
- OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
- CPU-Target: 64Bit
Re: Ereignishandling
Oh, viele, viele. Aber meine heißt jetzt "MVC":af0815 hat geschrieben: Fr 7. Feb 2025, 07:48 Ein Datenbankserver sagt dir nicht ob such was geändert hat. Da gibt es bei den Sytemen die ich kenne nichts. Das ist in der Verantwortung des Programmieres in Multiuserumgebungen damit umzugehen. Dafür gibt es verschiedene Strategien.
viewtopic.php?p=148012#p148012
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.
-
- Beiträge: 125
- Registriert: Fr 9. Aug 2013, 08:28
- OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
- CPU-Target: 64Bit
Re: Ereignishandling
Jaaaa, innerhalb der Anwendung. Wem nützt das was?Niesi hat geschrieben: Do 6. Feb 2025, 17:53 Hier wird OnActivate jedesmal aufgerufen, wenn INNERHALB der Anwendung MainForm den Focus erhält.
Selbstverständlich, oder kennst du einen User, der nur mit einer Anwendung arbeitet?Niesi hat geschrieben: Do 6. Feb 2025, 17:53Kann es sein, dass Dir da vorschwebt, dass dies auch im Zusammenhang mit anderen Anwendungungen passieren soll?

Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.
-
- Beiträge: 125
- Registriert: Fr 9. Aug 2013, 08:28
- OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
- CPU-Target: 64Bit
Re: Ereignishandling
Japp, und tiOPF bringt's leider auch nicht. Ich brauche eine Lösung, die auf dem Server läuft, mit der alle User kommunizieren können.af0815 hat geschrieben: Fr 7. Feb 2025, 07:48Ein Datenbankserver sagt dir nicht ob such was geändert hat. Da gibt es bei den Sytemen die ich kenne nichts. Das ist in der Verantwortung des Programmieres in Multiuserumgebungen damit umzugehen. Dafür gibt es verschiedene Strategien.
Zur Multiuser-Thematik finde ich da leider nirgends was. Liegt das nur an meiner Suchmethode? Dann klärt mich bitte mal auf.af0815 hat geschrieben: Mo 10. Feb 2025, 16:07Ist in der Doku von tiOPF ja schön erklärt.
https://tiopf.sourceforge.net/
https://tiopf.sourceforge.net/Doc/Conce ... nOPF.shtml
http://geldenhuys.co.uk/articles/
Nein, auf eine komplette Anwendung, wie man sieht.
Nein, die unter anderem die Datenbankzugriffe verwaltet und, wenn einer was in der Datenbank geändert hat, das sofort jedem anderen User mitteilt. Natürlich nur, wenn es "seine" Daten betrifft. Sonst wär's wohl ein Feuerwerk von zu 90% wertlosen Messages.Zvoni hat geschrieben: Fr 7. Feb 2025, 08:02 der periodisch nach neuen "Daten" sucht (oder einfach nen Timer auf der MainForm hat)

Immerhin habe ich inzwischen wenigstens ein funktionierendes Beispiel gefunden, wie man Messages an eine Form senden kann, auf die sie auch reagiert.

https://forum.lazarus.freepascal.org/in ... #msg331289
Erst mal nur innerhalb einer Anwendung, aber schon mal ein Fortschritt, wenn auch nur ein kleiner.

Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.
- Zvoni
- Beiträge: 368
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Ereignishandling
OK, mal Butter bei die Fische wie ein Kumpel von mir immer sagt.
Szenario:
Du hast ne Datenbank auf nem Server laufen (MySQL, MS SQL, Oracle, Sockenschublade, was auch immer).
Es gibt "viele" User, die an deren eigenen Rechnern/Workstations arbeiten, und Daten in der DB "ändern"
Du willst jetzt, dass User A sofort darüber informiert wird, wenn User B etwas in der DB geändert hat.
Es gibt meines Wissens nur ein DBMS, welches ein integriertes Event-System hat: Firebird.
MySQL hat es nicht, MS SQL und viele andere auch nicht (glaub ich zumindest. Hab jetzt nicht wirklich mit allen gängigen DB-Systemen gearbeitet).
PUNKT! Das hat nix mit Lazarus oder FreePascal zu tun. Das hat ausschliesslich was mit dem verwendeten DB-Server zu tun.
Ich sehe zwei Möglichkeiten, deine Aufgabe umzusetzen.
1) Der "klassische" Weg: sogenanntes "Polling" --> jede Workstation schaut in einem definierten Zeit-Intervall nach, ob es was neues gibt --> darauf war mein Kommentar mit eigener Thread/Timer gemünzt
2) Du implementierst so etwas wie ein "Chat"-System: Jeder Client meldet sich an einem zentralen "Chat-Server" an (z.b. per Sockets)
Jedesmal wenn User B etwas an der DB ändert, sendet er einen Broadcast an diesen "Chat-Server", welcher wiederum den Broadcast an alle anderen Clients sendet, und z.B. den Client von User A dazu auffordert einen Refresh durchzuführen.
Siehe auch: https://wiki.lazarus.freepascal.org/Sockets
Insbesondere der letzte Abschnitt mit den Events:
Szenario:
Du hast ne Datenbank auf nem Server laufen (MySQL, MS SQL, Oracle, Sockenschublade, was auch immer).
Es gibt "viele" User, die an deren eigenen Rechnern/Workstations arbeiten, und Daten in der DB "ändern"
Du willst jetzt, dass User A sofort darüber informiert wird, wenn User B etwas in der DB geändert hat.
Es gibt meines Wissens nur ein DBMS, welches ein integriertes Event-System hat: Firebird.
MySQL hat es nicht, MS SQL und viele andere auch nicht (glaub ich zumindest. Hab jetzt nicht wirklich mit allen gängigen DB-Systemen gearbeitet).
PUNKT! Das hat nix mit Lazarus oder FreePascal zu tun. Das hat ausschliesslich was mit dem verwendeten DB-Server zu tun.
Ich sehe zwei Möglichkeiten, deine Aufgabe umzusetzen.
1) Der "klassische" Weg: sogenanntes "Polling" --> jede Workstation schaut in einem definierten Zeit-Intervall nach, ob es was neues gibt --> darauf war mein Kommentar mit eigener Thread/Timer gemünzt
2) Du implementierst so etwas wie ein "Chat"-System: Jeder Client meldet sich an einem zentralen "Chat-Server" an (z.b. per Sockets)
Jedesmal wenn User B etwas an der DB ändert, sendet er einen Broadcast an diesen "Chat-Server", welcher wiederum den Broadcast an alle anderen Clients sendet, und z.B. den Client von User A dazu auffordert einen Refresh durchzuführen.
Siehe auch: https://wiki.lazarus.freepascal.org/Sockets
Insbesondere der letzte Abschnitt mit den Events:
OnEndOfLineReceive : this event occurs where a LF character (0x0A) is received from server.
Zuletzt geändert von Zvoni am Mi 12. Feb 2025, 10:05, insgesamt 1-mal geändert.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Re: Ereignishandling
Nun, das stimmt so nicht ganz. PostgreSQL hat ebenfalls ein Event-Management auf Basis der beiden PGSQL-Befehle NOTIFY (https://www.postgresql.org/docs/current/sql-notify.html) und LISTEN (https://www.postgresql.org/docs/current/sql-listen.html), in die sich Clients einhängen können.Es gibt meines Wissens nur ein DBMS, welches ein integriertes Event-System hat: Firebird.
MySQL hat es nicht, MS SQL und viele andere auch nicht (glaub ich zumindest. Hab jetzt nicht wirklich mit allen gängigen DB-Systemen gearbeitet).
PUNKT! Das hat nix mit Lazarus oder FreePascal zu tun. Das hat ausschliesslich was mit dem verwendeten DB-Server zu tun.
Etwas FPC-Anschauungsmaterial dazu befindet sich unter den Beispielen zur Unit SQLdb in der Datei pqeventstest.pp. Ein etwas einfacheres Beispiel für Lazarus findet sich im internationalen Forum: https://forum.lazarus.freepascal.org/in ... ic=42040.0
- Zvoni
- Beiträge: 368
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Ereignishandling
Vielen Dank, Stevie, für die "Korrektur"Stevie hat geschrieben: Mi 12. Feb 2025, 09:53Nun, das stimmt so nicht ganz. PostgreSQL hat ebenfalls ein Event-Management auf Basis der beiden PGSQL-Befehle NOTIFY (https://www.postgresql.org/docs/current/sql-notify.html) und LISTEN (https://www.postgresql.org/docs/current/sql-listen.html), in die sich Clients einhängen können.Es gibt meines Wissens nur ein DBMS, welches ein integriertes Event-System hat: Firebird.
MySQL hat es nicht, MS SQL und viele andere auch nicht (glaub ich zumindest. Hab jetzt nicht wirklich mit allen gängigen DB-Systemen gearbeitet).
PUNKT! Das hat nix mit Lazarus oder FreePascal zu tun. Das hat ausschliesslich was mit dem verwendeten DB-Server zu tun.
Etwas FPC-Anschauungsmaterial dazu befindet sich unter den Beispielen zur Unit SQLdb in der Datei pqeventstest.pp. Ein etwas einfacheres Beispiel für Lazarus findet sich im internationalen Forum: https://forum.lazarus.freepascal.org/in ... ic=42040.0
Ich hatte ja geschrieben, dass ich nicht mit allen gängigen DBMS gearbeitet habe, und bei MySQL weiss ich es eben definitiv, dass es kein Event-System hat.
Bei Postgres weiss ich, dass Postgres "existiert"

Bei z.B. SQLite: Das hat nen "Hook", um Updates, Commits etc. "abzufangen", hab aber noch nicht wirklich eine Möglichkeit gefunden, daraus Kapital zu schlagen
Und dein Link zum Lazarus-Forum für PQEventMonitor bestätigt meine Aussage: Polling
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- af0815
- Lazarusforum e. V.
- Beiträge: 6768
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Ereignishandling
Vor allen wie soll das sinnvoll funktionieren, mit den Events ? Vor allen, wenn eventuell das ganze über mehrere Standorte verteilt ist. Lokal kann ich es mir vorstellen, aber verteilt ? Was passiert dann, wenn sich Server über replikation abgleichen müssen. Für mich sind die Events keine tragfähige Idee.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 368
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Ereignishandling
Doch, das kann schon funktionieren.af0815 hat geschrieben: Mi 12. Feb 2025, 11:03 Vor allen wie soll das sinnvoll funktionieren, mit den Events ? Vor allen, wenn eventuell das ganze über mehrere Standorte verteilt ist. Lokal kann ich es mir vorstellen, aber verteilt ? Was passiert dann, wenn sich Server über replikation abgleichen müssen. Für mich sind die Events keine tragfähige Idee.
Denk nur mal an die ganzen Anzeigetafeln an Bahnhöfen oder Flughäfen.
Oder ich kenne es aus der Produktion in Firmen, welche z.B. einen grossen Monitor über dem Montageplatz haben, wo in "Echtzeit" z.B. die Zahl der produzierten Einheiten angezeigt wird (Stichwort: Tagesziel).
Die Anwendung, welche auf diesen Monitoren läuft, ist nicht das ERP-System, in welchem die Buchungen stattfinden (und dann ein Update/Refresh versenden), sondern "eigenständige" Programme, welche die Datenbank "abfragen", ob es was neues gibt. Ist meistens Browser-basiert.
Habs schon gesehen, dass jeder solcher Monitor nen Raspberry hinten dran geklemmt hat, auf welchem z.B. nur dieser Browser läuft.
Browser in Autostart, Default URL für Browser-Start konfiguriert, Fertig ist der Lack.
Hatte ich sogar auf unserem alten Sprungplatz (Ich bin Fallschirmspringer) so im Einsatz: unser Buchungssystem war ne Desktop-Anwendung mit MySQL im Hintergrund, welche nur an einem Arbeitsplatz lief.
Die ganzen anderen Monitore (4-5 Stück), welche über das Gelände und in diversen Hallen verteilt waren, hatten jeweils nen minisforum hinten dran geklemmt, darauf lief nur Edge mit vorkonfigurierter URL, welche dann per Timer in JavaScript die Anzeige alle 5 Sekunden aktualisiert hat (und ja, wir hatten nen Kestrel-Server laufen, welcher diese Monitore gefüttert hat)
Geschieht in der Regel per "Polling", kann aber auch mit einem Event-System erreicht werden, sofern das DBMS das auch anbietet (Firebird, PostGres)
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
- af0815
- Lazarusforum e. V.
- Beiträge: 6768
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Ereignishandling
Was glaubst du, was ich die letzten Jahre programmiert habeZvoni hat geschrieben: Mi 12. Feb 2025, 11:34Doch, das kann schon funktionieren.af0815 hat geschrieben: Mi 12. Feb 2025, 11:03 Vor allen wie soll das sinnvoll funktionieren, mit den Events ? Vor allen, wenn eventuell das ganze über mehrere Standorte verteilt ist. Lokal kann ich es mir vorstellen, aber verteilt ? Was passiert dann, wenn sich Server über replikation abgleichen müssen. Für mich sind die Events keine tragfähige Idee.
Denk nur mal an die ganzen Anzeigetafeln an Bahnhöfen oder Flughäfen.
Oder ich kenne es aus der Produktion in Firmen, welche z.B. einen grossen Monitor über dem Montageplatz haben, wo in "Echtzeit" z.B. die Zahl der produzierten Einheiten angezeigt wird (Stichwort: Tagesziel).



Nicht nur Lazarus, sondern auch mit RedLion Crimson etc. - da wird immer nur gepollt !! Oder über das Simatik Protokoll auf eine SPS zu gegriffen und daraus ein Event gemacht, ist auch nichts anderes als pollen und lokale Events.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Zvoni
- Beiträge: 368
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Ereignishandling
Woher soll ich denn wissen, was du die letzten Jahre gemacht hast?af0815 hat geschrieben: Mi 12. Feb 2025, 12:19 Was glaubst du, was ich die letzten Jahre programmiert habe![]()
![]()
![]()
Ich weiss ja meistens am Nachmittag nicht, was ich Vormittags gemacht habe

Korrekt. Wobei ich persönlich das Polling nicht wirklich mag, da es ja doch meistens aus "no-ops" besteht (weil halt eben nix neues in der DB gefunden wurde).Nicht nur Lazarus, sondern auch mit RedLion Crimson etc. - da wird immer nur gepollt !! Oder über das Simatik Protokoll auf eine SPS zu gegriffen und daraus ein Event gemacht, ist auch nichts anderes als pollen und lokale Events.
Und ein Event-System (vom DBMS-Server selbst angeboten bzw. selbst implementiert --> siehe "Chat"-System per sockets) hat dann doch einen gewissen Charme, dass Code eben halt nur dann ausgeführt wird, wenn es auch tatsächlich anfällt.
Ob man jetzt ne UDP-Breitseite abfeuert, oder halt doch individuell die Nachrichten für jeden Client händelt (Je Client ein eigener Socket, wird dann lustig mit den Ports), ist dann Entscheidung des Programmierers.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 125
- Registriert: Fr 9. Aug 2013, 08:28
- OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
- CPU-Target: 64Bit
Re: Ereignishandling
MariaDB (ich habe meine Gründe).Zvoni hat geschrieben: Mi 12. Feb 2025, 09:07 Du hast ne Datenbank auf nem Server laufen (MySQL, MS SQL, Oracle, Sockenschublade, was auch immer).
So isses.Zvoni hat geschrieben: Mi 12. Feb 2025, 09:07 Es gibt "viele" User, die an deren eigenen Rechnern/Workstations arbeiten, und Daten in der DB "ändern"
Nicht nur das. Alle User, die gerade mit diesen Daten arbeiten. Und die sollen nicht nur informiert werden, auch gleich die aktualisierten Daten sehen.Zvoni hat geschrieben: Mi 12. Feb 2025, 09:07Du willst jetzt, dass User A sofort darüber informiert wird, wenn User B etwas in der DB geändert hat.
Also was für Ideen ihr da so habt ... Habt ihr das Prinzip "n-Tier" vergessen?
(Quelle: Wikipedia) Ok, die nennen die Schicht, die "alles" macht, "Domänenschicht" - auch gut.


Also: Die Anmeldung erfasst die Daten eines neuen Patienten. Mit dem Klick auf den Button "Neu" erzeugt die Dame in der "Objektschicht" ein neues Objekt der Klasse "Patient". Mit den Eigenschaften Name, Vorname, Geburtsdatum, Adresse, Telefon, Wehwehchen, Krankenversicherung, zu benachrichtigende Angehörige/Freunde, pipapo. Mit dem Klick auf "Ok" werden diese Eigenschaften mit den eingegebenen Daten gefüllt, und eine Methode "Speichern" aufgerufen. Die bastelt einen SQL-String zusammen, etwa: "INSERT INTO patienten (Name, Vorname, Geburtsdatum, Adresse, Telefon, Wehwehchen, Krankenversicherung, Angehörige_Freunde) VALUES ('Max', 'Mustermann', '11.11.1111', ..., ..., );" und sendet ihn an den Datenbankserver zur Ausführung. Feddich.
Wie das bei "SELECT" (also Daten auslesen) oder "UPDATE" (Daten ändern) laufen soll, muss ich doch jetzt nicht mehr erklären? Die Unterschiede: Erst mal wird nachgeguckt, ob in der Objektschicht schon ein Objekt der Klasse "Patient" mit den Eigenschaften Name = 'Mustermann', Vorname = 'Max', Geburtsdatum = '11.11.1111', ... existiert. Wenn ja, wird's verwendet., wenn nicht, ein neues erzeugt. Mit den Daten aus der Datenbank. Die Besonderheit bei Update eben: Die Anwendungschicht kriegt eine Rückmeldung (üblicherweise wohl "Callback" genannt) über die aktualisierten Daten. Aber eben nur die User, die gerade damit arbeiten.
(Löschrechte wollen wir mal nur dem Admin einräumen.)

Das ist doch nicht schlimm, hast doch alles gespeichert?Zvoni hat geschrieben: Mi 12. Feb 2025, 12:44Ich weiss ja meistens am Nachmittag nicht, was ich Vormittags gemacht habe

Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.
- Zvoni
- Beiträge: 368
- Registriert: Fr 5. Jul 2024, 08:26
- OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
- CPU-Target: 32Bit
- Wohnort: BW
Re: Ereignishandling
Das ist aber genau das, wovon ich (und die anderen) aber reden:
User A legt einen Patienten Max Mustermann an, und feuert das an den MariaDB-Server ab (INSERT INTO).
Nur der Client von User A weiss genau zu diesem Zeitpunkt jetzt, dass es neue Daten gibt.
Und zwar weil MariaDB selbst eben keinen CALLBACK ausführt "neue Daten" erhalten!
Du brauchst jetzt einen Weg, dass User A eine Nachricht an alle anderen User absetzt "Achtung: Max Mustermann ist jetzt in der DB vorhanden"
Und ja, das wäre jetzt ein Job für die "Domänenschicht" aus deinem Schaubild.
Das Schaubild beschreibt aber eigentlich genau das was ich oben beschrieben habe:
Alle Clients "registrieren" sich bei der Domänen-Schicht.
Was denkst du denn, was so ein "Chat"-Server ist? Wobei ich zugebe, dass "Chat"-Server vielleicht ein schlecht gewählter Begriff ist.
Auch mit dem n-Tier-Ansatz kommst du nicht daran vorbei, dass der MariaDB-Server eben NICHT eine Rückmeldung von sich aus gibt. Und zwar egal ob an die User direkt, oder via dem Umweg über Domänenschicht.
Das musst du von Hand von machen, im Fall von MariaDB
User A legt einen Patienten Max Mustermann an, und feuert das an den MariaDB-Server ab (INSERT INTO).
Nur der Client von User A weiss genau zu diesem Zeitpunkt jetzt, dass es neue Daten gibt.
Und zwar weil MariaDB selbst eben keinen CALLBACK ausführt "neue Daten" erhalten!
Du brauchst jetzt einen Weg, dass User A eine Nachricht an alle anderen User absetzt "Achtung: Max Mustermann ist jetzt in der DB vorhanden"
Und ja, das wäre jetzt ein Job für die "Domänenschicht" aus deinem Schaubild.
Das Schaubild beschreibt aber eigentlich genau das was ich oben beschrieben habe:
Alle Clients "registrieren" sich bei der Domänen-Schicht.
Was denkst du denn, was so ein "Chat"-Server ist? Wobei ich zugebe, dass "Chat"-Server vielleicht ein schlecht gewählter Begriff ist.
Auch mit dem n-Tier-Ansatz kommst du nicht daran vorbei, dass der MariaDB-Server eben NICHT eine Rückmeldung von sich aus gibt. Und zwar egal ob an die User direkt, oder via dem Umweg über Domänenschicht.
Das musst du von Hand von machen, im Fall von MariaDB
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.
-
- Beiträge: 125
- Registriert: Fr 9. Aug 2013, 08:28
- OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
- CPU-Target: 64Bit
Re: Ereignishandling
Ja mei, dafür ist die "Domänenschicht" doch da. Die macht eben nicht "fire and forget". Und der DB-Server meldet sehr wohl zurück, wenn ihm was nicht passt. Beispiele (hier auf bash-Ebene):Zvoni hat geschrieben: Mi 12. Feb 2025, 13:56 Das ist aber genau das, wovon ich (und die anderen) aber reden:
User A legt einen Patienten Max Mustermann an, und feuert das an den MariaDB-Server ab (INSERT INTO).
Nur der Client von User A weiss genau zu diesem Zeitpunkt jetzt, dass es neue Daten gibt.
Und zwar weil MariaDB selbst eben keinen CALLBACK ausführt "neue Daten" erhalten!
Code: Alles auswählen
query=$(echo "INSERT INTO accounts(name) VALUES 'Mustermann';" | mariadb -u melinauser -pmelinapw melina)
ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)

Code: Alles auswählen
query=$(echo "INSERT INTO accounts(name) VALUES ('Mustermann';" | mariadb -u melinauser -pmelinpw melina)
ERROR 1045 (28000): Access denied for user 'melinauser'@'localhost' (using password: YES)

Code: Alles auswählen
query=$(echo "INSERT INTO accounts(name) VALUES ('Mustermann';" | mariadb -u melinauser -pmelinapw melina)
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1

Code: Alles auswählen
hk@Melina:~$ query=$(echo "INSERT INTO accounts(name) VALUES ('Mustermann');" | mariadb -u melinauser -pmelinapw melina)
ERROR 1364 (HY000) at line 1: Field 'guid' doesn't have a default value

(Übrigens: Melina ist keine Frau, aber eine gewisse Liebhaberei von mir schon.)

Nö. Max wird sich doch gleich persönlich auf der Station melden.Zvoni hat geschrieben: Mi 12. Feb 2025, 13:56Du brauchst jetzt einen Weg, dass User A eine Nachricht an alle anderen User absetzt "Achtung: Max Mustermann ist jetzt in der DB vorhanden"


Korrekt.Zvoni hat geschrieben: Mi 12. Feb 2025, 13:56Und ja, das wäre jetzt ein Job für die "Domänenschicht" aus deinem Schaubild.
Woher sollte ich das wissen?Zvoni hat geschrieben: Mi 12. Feb 2025, 13:56Das Schaubild beschreibt aber eigentlich genau das was ich oben beschrieben habe:
Alle Clients "registrieren" sich bei der Domänen-Schicht.
Was denkst du denn, was so ein "Chat"-Server ist?

Stimmt, von "Chatten" halte ich eh' nichts. Und da bin ich wohl nicht der einzige.Zvoni hat geschrieben: Mi 12. Feb 2025, 13:56Wobei ich zugebe, dass "Chat"-Server vielleicht ein schlecht gewählter Begriff ist.


Von wegen, s.o. Und wenn nichts zurückkommt, heißt das was? Genau: Er hat's gefressen!Zvoni hat geschrieben: Mi 12. Feb 2025, 13:56Auch mit dem n-Tier-Ansatz kommst du nicht daran vorbei, dass der MariaDB-Server eben NICHT eine Rückmeldung von sich aus gibt.

Sicher doch.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.