Hallo,
vielen Dank für den ausführlichen Post! Ich arbeite nicht oft mit datensensitiven Komponenten, sondern befülle Grids und andere Komponenten meistens von Hand. Auch insert / updates Statements schreibe ich für gewöhnlich manuell und verwende eine
Query nur als Schnittstelle zur Datenbank.
Von daher war der Befehl
Query.First die Hosenträger zum Gürtel und weil ich testen wollte, ob ich damit irgendwie weiterkomme. Ich bin mir absolut bewusst, dass ich die in diesem Anwendungsfall nicht benötige.
Was will ich gerade machen: Ich habe eine Client / Server App, die den Life-Zustand der Maschinen anzeigt. Dabei laufen mehrere Clients hier im Unternehmen. Diese fordern alle 60 Sekunden neue Daten von der Server App an (also nicht ganz Life
).
Wenn aber 5 Clients, die zu unterschiedlichen Uhrzeiten gestartet werden, immer die Daten anfordern, wären das ziemlich viele unnötige Abfragen. Deshalb lasse ich die Server App alle 60 Sekunden die Daten von der
DB abfragen, die dann in der
Query stehen. Immer wenn ein Client nach frischen Daten fragt, werden diese via
Query.SaveToStream an den Client geschickt.
Wenn 120 Sekunden kein Client nach neuen Daten gefragt hat, stoppt auch der Server seine Abfragen und startet erst wieder mit einer neuen Anfrage.
Ich nutze also die
Query als Datenspeicher aus dem die Clients bedient werden.
Jetzt habe ich aber leider das Problem, dass die Daten nicht von einem Datenbankserver kommen, sondern von zweien. Das liegt daran, dass das ERP-System so aufgebaut ist, denn die Datenbanken gehören zum ERP-System.
Deshalb habe ich eine zweite
Query created, die Daten aus der Tabelle auf dem zweiten Datenbank-Server abgefragt und wollte anschließend ein Datenfeld in der ersten
Query durch Daten aus der zweiten
Query ersetzen.
Deshalb ist ein Post an der Stelle gar nicht gewünscht, denn ich will gar keine Daten auf der Datenbank ändern, sondern nur den aktuellen Datensatz in der
Query. Und dafür brauche ich eine Möglichkeit, den Editiermodus zu beenden.
Ich hatte zwischendurch einen anderen Weg mit einem JSON-Result, welches ich über die
API bekommen kann getestet. Hatte dabei dann die Daten manuell in eine FDMemTable geschrieben und versucht, diese via MEMTable.SaveToStream an den Client zu übergeben. Aber dann funktionierte das LoadFromStream leider nicht, weil der Stream nicht interpretiert werden konnte.
Die Lösung, die oben steht, funktioniert bis hierhin ohne Zicken, denn ich habe sie heute den ganzen Vormittag parallel laufen lassen. Aber ich hätte gerne eine saubere Lösung, auch wenn die App für den Eigengebrauch ist...
Vielen Dank und lieben Gruß
Patrick