Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Manipulation eines Records in einer FDQuery

  Alt 16. Jun 2023, 11:37
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
Patrick
  Mit Zitat antworten Zitat