Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Datenbank disconnect timeout (https://www.delphipraxis.net/188357-datenbank-disconnect-timeout.html)

00000110001 24. Feb 2016 07:44

Datenbank disconnect timeout
 
Hallo,

ich habe das Problem, dass es so ca. 20 Sek. dauert bis man eine Verbindung trennen kann.
Benutzt wird folgendes:
- Delphi XE7
- IBDatabase
- Firebird 2.5
Datenbankverbindung von einem PC auf anderen, z.B. 192.168.1.1/3050:C:\temp\test.fdb
Wenn keine Verbindung mehr existiert, dann lokal arbeiten.
Ablauf:
- IBDatabase.DatabaseName:=192.168.1.1/3050:C:\temp\test.fdb;
- IBDatabase.Connected:=True;
- Verbindung trennen (Kabel ausgesteckt)
- IBDatabase.Connected:=False;
- IBDatabase.DatabaseName:=127.0.0.1/3050:C:\temp\test.fdb;
- IBDatabase.Connected:=True;
Das Problem ist, dass "IBDatabase.Connected:=False" so ca. 20 Sek. braucht!
Kann man das irgendwie umgehen?
Gibt es dafür timeout?

Danke im Voraus!

hoika 24. Feb 2016 08:24

AW: Datenbank disconnect timeout
 
Hallo,
glaube ich nicht.
Die 20 Sekunden sind der Standard-TCP-Timeout von Windows.
Da du die IP kennst, könntest du den Server anpingen.

PS:
Es gibt in der firebird.conf diverse Schalterchen (z.B. ConnectionTimeout),
die dienen aber ausschließlich der Server-Seite.



Heiko

00000110001 24. Feb 2016 10:39

AW: Datenbank disconnect timeout
 
Hallo,
danke für die schnelle Antwort!
Ich pinge den Server an.
Und dann wechsele ich die DB, und genau da entstehen diese 20 Sek.

firebird.conf hilft mir in dem Fall nicht, weil das auf dem Server ist, firebird/server ist in dem Moment sowieso nicht erreichbar!

Fuchtel 24. Feb 2016 11:03

AW: Datenbank disconnect timeout
 
Hallo,

prüfe doch in einem extra Thread alle x sec ob man noch eine abfrage auf die DB machen kann:

Code:
 
...
try
  // Pseudo-Code:
  IBDatabase.Select := 'select ''x'' from dual';
  IBDatabase.Execute:
  ...
except
  MyConnection := false;
end;

hoika 24. Feb 2016 18:35

AW: Datenbank disconnect timeout
 
Hallo,

Ich pinge den Server an.

Und dort gibt es kein Ping-Timeout?


Heiko

00000110001 25. Feb 2016 06:58

AW: Datenbank disconnect timeout
 
Morgen,

Ping hat timeout.
So stelle ich fest, das der Server nicht da ist.
Das geht und ist kein Problem.
Wenn der Server nicht da ist, dann bekommt der Benutzer eine Meldung.
Lokal arbeiten JA - NEIN.
Wenn der Benutzer sagt JA, dann mache ich Connected:=False, und genau da muss man 20sek warten!

haentschman 25. Feb 2016 08:11

AW: Datenbank disconnect timeout
 
Moin... :P

Imho kommuniziert die Connection auch beim DISCONNECT mit dem Server. Da der ja nicht da ist, hast du den Timeout. In so einem Falle hilft nur die Connection wegzuwerfen und neu zu erzeugen.

Sir Rufo 25. Feb 2016 08:55

AW: Datenbank disconnect timeout
 
Zitat:

Zitat von haentschman (Beitrag 1331296)
In so einem Falle hilft nur die Connection wegzuwerfen und neu zu erzeugen.

Genau und diese Connection macht im Destroy ein implizites Close und man muss trotzdem die 20 Sekunden warten :stupid:

haentschman 25. Feb 2016 13:29

AW: Datenbank disconnect timeout
 
Bist du dir da sicher?

Ich verwende genau dieses Konstrukt. (IBDAC) Allerdings ist die Connection in einem Interface verpackt. Wenn ich keine Connection mehr habe (täglich durch die Zwangstrennung und dem VPN) werfe ich das Interface weg und mach ein Neues. Da muß keiner warten... :gruebel:

Sir Rufo 25. Feb 2016 14:32

AW: Datenbank disconnect timeout
 
Hast du den Quellcode? Dann schau in den
Delphi-Quellcode:
destructor
rein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 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