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