Hallo Zusammen,
ich glaube, es ist gelöst. Ich habe den Querys, die erstellt wurden, immer eine Connection gegeben, die auf die ConnectionDefs des Managers verweisen und nachdem sie nicht mehr benötigt werden, wie freigegeben werden.
Ich habe mich dabei an diesem Artikel orientiert:
https://docwiki.embarcadero.com/RADS...ding_(FireDAC)
Das sieht dann exemplarisch so aus:
Delphi-Quellcode:
procedure TMxSQL.Get_Settings(var Cols: TCols; var Rows: TRows; Tabelle: string; AStream: TStream);
var Logic: TLogic;
qry_Settings: TFDQuery;
oConn_MySQL: TFDConnection;
begin
Logic:= TLogic.Create;
Logic.Set_Query_FDMngr2(qry_Settings, oConn_MySQL, 'BDHMySQL');
Try
qry_Settings.sql.Add('select * from ' + Tabelle);
ExecQuery(qry_Settings, Cols, Rows);
if Assigned(AStream) then begin
qry_Settings.SaveToStream(AStream, sfJSON);
end;
qry_Settings.Close;
oConn_MySQL.Close;
Finally
qry_Settings.Free;
oConn_MySQL.Free;
Logic.Free;
End;
end;
Delphi-Quellcode:
procedure TLogic.Set_Query_FDMngr2(
var Query: TFDQuery;
var oConn: TFDConnection; Database:
string);
begin
oConn := TFDConnection.Create(
nil);
oConn.ConnectionDefName := Database;
Query:= TFDQuery.Create(
nil);
query.Connection:= oConn;
Query.SQL.Clear;
Query.FetchOptions.AutoFetchAll;
Query.FetchOptions.Mode := fmAll;
end;
Damit ist die Anwendung heute ca. 40 Minuten ohne Fehler gelaufen... Ich hoffe, dass war wirklich die Lösung
Ich habe mir die Verbindungen auf der Datenbank angesehen, dass waren ca. 11 die aber konstant blieben...
@Delphi.Narium
Du hattest Recht, ich hatte
qry_Settings.Free;
vergessen. Jetzt läuft der Speicher bei der App nicht mehr voll.
Zitat:
Wenn AStream zwingend erforderlich ist, kann man sich bei if not Assigned(AStream) die Routine sparen, daher würd' ich die Prüfung an den Anfang verschieben.
Das soll so sein, denn der Stream kann auch nil sein, wenn die Daten nicht an den Client gesendet werden, sondern nur in der ServerApp verwendet werden.
Vielen Dank, ich bastel mal weiter und hoffe, keine bösen Überraschungen zu erleben.
LG Patrick