Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.432 Beiträge
 
Delphi 7 Professional
 
#16

AW: Manipulation eines Records in einer FDQuery

  Alt 17. Jun 2023, 22:52
Eventuell ginge aber auch sowas:
Delphi-Quellcode:
procedure TMxSQL.Get_act_MachineData(Machine_ID: string; LStream: TStream; RefreshData, SendData: boolean);
...
begin
...
  OperationsList := DB_Modul.Read_Einstellungswert('Life_Data_OperationList');
  MsQuery.SQL.Add('große Abfrage von oben'); // Neue Abfragen erstellen.
  CDMQuery.SQL.Add('kleine Abfrage von oben');
  MsQuery.Open; // Erste Abfrage öffnen
  CDMQuery.ParamByName('Device').AsString := MsQuery.FieldByName('device_id').AsString; // und in zweiter Abfrage den Parameter setzen.
  CDMQuery.Open; // Die zweite Abfrage öffnen,
  MsQuery.Edit; // die erste Abfrage editieren und den Wert aus der zweiten Abfrage übernehmen.
  MsQuery.FieldByName('Operator').AsString := CDMQuery.FieldByName('userID').AsString;
  MsQuery.SaveToStream(LStream, sfJSON); // unmittelbar nach der Änderung in den Stream schreiben,
  MsQuery.Cancel; // die letzte Änderung verwerfen
  MsQuery.Close; // und die Abfragen schließen.
  CDMQuery.Close;
...
end;
Der Stream enthält immer die aktuellen Daten, so dass bei einer Anforderung durch einen Client nicht jedesmal auf die Query zugegriffen werden muss. Der Inhalt des Streams bleibt ja erhalten und kann beliebig oft an die Clients ausgeliefert werden.

Eigentlich wird nur die Stelle, an der die Query in den Stream geschrieben wird, in deiner ursprünglichen Prozedur an eine andere Stelle verschoben. Der Teil ab  if SendData then begin kann (vermutlich) entfallen.

Hoffentlich liege ich damit nicht allzuweit daneben
  Mit Zitat antworten Zitat