Einzelnen Beitrag anzeigen

Ykcim

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

AW: [FireDAC][DatS]-1.Name[View] ist in der Liste doppelt vorhanden

  Alt 14. Dez 2023, 14:55
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
Patrick
  Mit Zitat antworten Zitat