Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Delphi 10 Seattle: Zugriffsverletzung nach Reconnect auf DBSM (https://www.delphipraxis.net/207184-delphi-10-seattle-zugriffsverletzung-nach-reconnect-auf-dbsm.html)

Tom87 2. Mär 2021 10:01

Datenbank: MSSQL • Version: 2016 • Zugriff über: FIREDAC

Delphi 10 Seattle: Zugriffsverletzung nach Reconnect auf DBSM
 
Hallo,

ich nutze untenstehenden Code für einen MSSQL Datenbankzugriff. Dieser funktioniert auch so weit wenn physikalisch eine Netzwerkverbindung besteht.
Nun folgendes:
erster Verbindungsabbruch
1. stecke ich das Netzwerkkabel ab -> es tritt wie erwartet eine Exception ekUKViolated auf
2. stecke ich das Netzwerkkabel wieder an -> Zugriff auf DB wieder möglich
zweiter/weitere Verbindungsabbrüche
3. stecke ich das Netzwerkkabel ein weiteres mal ab, erster Versuch -> Exception ekUKViolated
Achtung jetzt wird es interessant:
4. weiter(e) Versuch(e) bei abgesteckten Netzwerkkabel -> Exception Zugriffsverletzung!!
5. auch wenn Netzwerkkabel wieder eingesteckt wird, tritt diese Zugriffsverletzung auf und man kommt ohne Neustart der Anwendung nicht mehr aus der Nummer raus.

Woran könnte das liegen?
- müssen FDQuery oder FDConnection erneut erzeugt werden?
- muss FDManager.Active getoggelt werden?
- könnte die Einstellung pooling an der Stelle Probleme bereiten?

Delphi-Quellcode:
procedure TFormMain.Btn_SQLCommandClick(Sender : TObject);
begin
  ZeitmessungStart;
  FDQuery.SQL.Text := ED_SQLCommand.Text;
  try
    try
      FDConnection.Connected := true;
      FDQuery.Open();
    except // Beispiel zur Fehlerbehandlung
      on E: Exception do begin
        Sleep(0);
      end;
      on E: EFDDBEngineException do begin
        if E.Kind = ekUKViolated then
          ShowMessage('Hier Fehlerbehandlung');
        raise;
      end;
    end;
  finally
    ZeitmessungStop;
  end;
end;
Einstellungen:
Code:
DriverID=MSSQL
pooled=true
Danke,
Thomas

Tom87 2. Mär 2021 12:06

AW: Delphi 10 Seattle: Zugriffsverletzung nach Reconnect auf DBSM
 
Hi Leute,
Thema hat sich erledigt - hab mir die Antwort selbst gegeben.

- Bei Verwendung von Pooled := true:
FDConnection und FDQery müssen bei jedem Aufruf neu erzeugt werden.

deshalb arbeite ich in diesem Fall mit pooled := false. In diesem Fall können die einmal erzeugte FCConnection und FDQuery weiter verwendet werden.

Grüße
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.

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