Habe mal noch ein bisserl rumgefrickelt:
Delphi-Quellcode:
// procedure TMxSQL.Get_act_MachineJSON(Machine_ID: string; RefreshData, SendData: boolean; var LStream: TMemoryStream);
procedure TMxSQL.Get_act_MachineJSON(Machine_ID: string; RefreshData, SendData: boolean; LStream: TMemoryStream);
var Logic: TLogic;
API_URL: string;
IdHTTP_MStatus: TIdHTTP;
RStream: TMemoryStream;
begin
if (not RefreshData) and (not DB_Modul.Tmr_LM_RefreshData.Enabled) and (SendData) then begin
RefreshData := true;
DB_Modul.Tmr_LM_RefreshData.Enabled := true;
DB_Modul.FLM_OfflineState := 0;
DB_Modul.Write_LM_Protokoll('RefreshTimer aktiviert.');
end else
if (not RefreshData) and (DB_Modul.Tmr_LM_RefreshData.Enabled) and (SendData) then begin
DB_Modul.Tmr_LM_RefreshData.Enabled := true;
DB_Modul.FLM_OfflineState := 0;
DB_Modul.Write_LM_Protokoll('OfflineState-Counter zurückgesetzt.');
end else
if (not DB_Modul.Tmr_LM_RefreshData.Enabled) then begin
DB_Modul.Tmr_LM_RefreshData.Enabled := true;
DB_Modul.FLM_OfflineState := 0;
DB_Modul.Write_LM_Protokoll('RefreshTimer aktiviert. OfflineState-Counter zurückgesetzt.');
end;
Logic := TLogic.create;
IdHTTP_MStatus := TIdHTTP.Create;
API_URL := Format('%s%s',[DB_Modul.Read_Einstellungswert('MData_API_URL'),Machine_ID]);
RStream := TMemoryStream.Create;
try
if (RefreshData) then begin
IdHTTP_MStatus.Request.BasicAuthentication := true;
IdHTTP_MStatus.Request.Username := DB_Modul.Read_Einstellungswert('API_User');
IdHTTP_MStatus.Request.Password := DB_Modul.Read_Einstellungswert('API_Passwort');
IdHTTP_MStatus.Get(API_URL, RStream);
//RStream in den FStream kopieren
DB_Modul.CopyStream('LStream_',Machine_ID,'', RStream);
DB_Modul.Write_LM_Protokoll(Format('Refresh Daten Maschine %s',[Machine_ID]));
end;
//FStream in den LStream kopieren
DB_Modul.CopyStreamBack('LStream_',Machine_ID,'', LStream);
Finally
Logic.Free;
IdHTTP_MStatus.Free;
RStream.Free;
end;
end;
Werden die Daten im Stream auch noch zerstört, wenn Du im Prozeduraufruf das Var vor dem LStream weglässt?