Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi FDConnection automatsch disconnecten bei Ausführung (https://www.delphipraxis.net/213458-fdconnection-automatsch-disconnecten-bei-ausfuehrung.html)

fisipjm 2. Aug 2023 09:16

FDConnection automatsch disconnecten bei Ausführung
 
Hi,

ich hab ein Thema, dass mich immer mal wieder in meinem Workflow hindert und wollte mal wissen, ob ihr vielleicht eine Idee habt, wie man das lösen kann :)

Ich habe in einem Projekt eine FDConnection und ein paar Querys auf eine SQLite Datenbank. So weit, so unspektakulär. Da ich öfter mal mit LiveBindings hantiere, führe ich die Querys öfter schon in der Entwurfsphase aus. Das führt dann natürlich dazu, dass die FDConnection aktiviert wird. Wenn aber die FDConnection verbunden ist, befindet sich die SQLite DB im exklusiven Zugriff. Das führt dann dazu, dass mir das Programm jedes Mal crasht, weil die DB bereits exklusiv geöffnet ist.
Frage, kann ich der IDE irgendwie mitgeben, dass sie die Connection der Verbindung trennen soll, wenn ich das Programm ausführe?

Danke schon mal :)

Gruß
PJM

Uwe Raabe 2. Aug 2023 11:49

AW: FDConnection automatsch disconnecten bei Ausführung
 
Dafür gibt es bei der Connection das Property ConnectedStoredUsage

Für die Query wäre das analog ActiveStoredUsage

himitsu 2. Aug 2023 12:21

AW: FDConnection automatsch disconnecten bei Ausführung
 
Das regelt doch nur, ob das Connected/Active in der DFM gespeichert wird.

Wenn beim Debuggen die Form geladen ist, dann bleibt es doch dennoch aktiv?



Bei anderen DBKomponenten nennt sich sowas z.B. gerne Connection.Options.DisconnectedMode (am Beispiel von Devart),
wo die Connection sich nur kurz beim Execute connected und sich anschließend sofort wieder disconnected.

Aber auf die Schnelle sehe ich hier sowas nicht.
https://docwiki.embarcadero.com/Libr...ion_Properties

Uwe Raabe 2. Aug 2023 13:26

AW: FDConnection automatsch disconnecten bei Ausführung
 
Zitat:

Zitat von himitsu (Beitrag 1525154)
Das regelt doch nur, ob das Connected/Active in der DFM gespeichert wird.

In der Tat - Frage falsch verstanden...

Union 2. Aug 2023 17:51

AW: FDConnection automatsch disconnecten bei Ausführung
 
Wie wäre es, für die Entwicklung eine andere DB für den Entwurf zu verwenden?

juergen 2. Aug 2023 21:03

AW: FDConnection automatsch disconnecten bei Ausführung
 
Das Problem nervt mich auch bei SQLite.
Als Workaround setze ich eine ähnliche Lösung ein, wie von Union vorgeschlagen.
Da ich immer im Debugmodus entwickle habe ich das für mich über Compiler-Directiven gelöst und einer zweiten Datenbank.
Wenn du die "echte" Version kompilierst musst du halt umschalten auf Release, die FDConnection deaktivieren und "Alle Projekte erzeugen" ausführen.
Da ich das generell so handhabe passt dieser Workflow für mich bzw. habe ich mich an diesen Ablauf gewöhnt.

Delphi-Quellcode:
    DM.FDConnection1.Params.Clear;
    WITH DM.FDConnection1.Params DO
    BEGIN
      Add( 'DriverName=SQLITE' );
      Add( 'DriverID=SQLite' );
{$IFDEF DEBUG}
      Add( 'Database=' + ExtractFilePath( ParamStr( 0 ) ) + 'Kanban_Board_Debug.db' );
{$ELSE}
      Add( 'Database=' + ExtractFilePath( ParamStr( 0 ) ) + 'Kanban_Board.db' );
{$ENDIF}
    END;

himitsu 2. Aug 2023 21:13

AW: FDConnection automatsch disconnecten bei Ausführung
 
Im Designer hilft das nichts.
Aber du kannst im Designer die Design-Datenbank einstellen und das Connected nicht speichern lassen
und dann zur Laufzeit im Code die eigentliche Connection einstellen.


Alternativ könnte man sich via OTA vielleicht ins Starten des Prozesses/Debuggers einhängen (bzw. ganz einfach ins PreBuild oder PostBuild), dort die im Designer geöffneten Forms und darauf die Connections durchlaufen und die disconnecten.

Sinspin 3. Aug 2023 07:40

AW: FDConnection automatsch disconnecten bei Ausführung
 
Ich habe eigene Komponenten für den Datenzugriff. Also Query und Table und Connection sind gekapselt.
Query und Table haben zur Laufzeit kein Interesse an einer lokal rumliegenden Connection auf dem Form. Die wird beim Laden rausgeschmissen und sich beim globalen Connection Manager mit einer passenden versorgt.
Liegt irgendwo eine Connection rum die zur Designzeit aktiv war, ist die zur Laufzeit auch automatisch inaktiv.

Ab einer bestimmten Programmgröße wird es sinnvoll alles so Zentral wie möglich zu verwalten. Fängt man damit gleich beim ersten form an, hat man später nicht doppelte arbeit.

fisipjm 3. Aug 2023 10:28

AW: FDConnection automatsch disconnecten bei Ausführung
 
Zitat:

Zitat von himitsu (Beitrag 1525183)
Im Designer hilft das nichts.
Aber du kannst im Designer die Design-Datenbank einstellen und das Connected nicht speichern lassen
und dann zur Laufzeit im Code die eigentliche Connection einstellen.


Alternativ könnte man sich via OTA vielleicht ins Starten des Prozesses/Debuggers einhängen (bzw. ganz einfach ins PreBuild oder PostBuild), dort die im Designer geöffneten Forms und darauf die Connections durchlaufen und die disconnecten.

Das hört sich bisher von allen Lösungsvorschlägen für mich nach dem mit der besten Usability an. Sollte ich das hinbekommen, werde ich das Paket entsprechend veröffentlichen und hier linken. Aktuell leider keine Zeit dafür. Danke für die vielen Ideen.:thumb:

dummzeuch 3. Aug 2023 10:38

AW: FDConnection automatsch disconnecten bei Ausführung
 
Eventuell hilft hier GExperts weiter:
GEperts -> Configuratin -> Experts -> Set Components Property

Bei diesem Experten kann man Komponenten + Properties konfigurieren, die beim Speichern eines Projekts / Formulars auf einen bestimmten Wert gesetzt werden sollen. Das nicht ganz das, was Du suchst, denn diese Properties werden bei jedem Abspeichern gesetzt. Aber gerade bei Connections, die man eigentlich nie aktiv abspeichern will, ist das praktisch.

Voreingestellt sind TAdoConnection.Connected, TDatabase.Connected und TDataSet.Active, die alle auf False gesetzt werden. Diese Liste könnte um FDConnection.Connected erweitert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz