Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Verbindung zur Datenbank überprüfen (https://www.delphipraxis.net/165793-verbindung-zur-datenbank-ueberpruefen.html)

t0mmy 16. Jan 2012 15:56

Datenbank: MSSQL • Version: 2008 • Zugriff über: ADO

Verbindung zur Datenbank überprüfen
 
Hallo

Gibt es eine möglichkeit den Zustand der ADO Connection zu prüfen ja ich weiss es kommt sicherlich sowas wie state aber das hab ich schon probiert.
Das Problem is wenn ich eine Verbindung aufbaue und die Funktioniert auch.. dann ist das State gesetzt und wird wenn sich die datenbank von sich selbst verabschiedet nicht zurückgesetzt. D.h. ich hab immer ein State das True is.

Ein andauerndes .open der Datenbank will ich nicht machen denn das kostet nur prozessleistung.

Gibt es da eine andere Methode?

p80286 16. Jan 2012 16:21

AW: Verbindung zur Datenbank überprüfen
 
wenn du mit query's arbeitest hast Du das Problem nicht;
Delphi-Quellcode:

Myquery.Sql.Text:='select alles from mytable';
Myquery.Open;
if not(Myquery.Eof) then
....
....
MyQuery.Close;
Gruß
K-H

haentschman 16. Jan 2012 16:27

AW: Verbindung zur Datenbank überprüfen
 
Hallo...

Zitat:

wenn sich die datenbank von sich selbst verabschiedet
...wenn die Putzfrau über das Netzwerkkabel stolpert bekommt das die Connection nicht mit. Imho ist die einzige Methode um sicher zu gehen vor dem eigentlichen Statement ein kleines SELECT abzusetzen und ggf. den Fehler auszuwerten.
Ob das jetzt so sinnvoll ist wage ich zu bezweifeln...aber ich lasse mich gern belehren 8-)

shmia 16. Jan 2012 17:16

AW: Verbindung zur Datenbank überprüfen
 
Zitat:

Zitat von haentschman (Beitrag 1146209)
Imho ist die einzige Methode um sicher zu gehen vor dem eigentlichen Statement ein kleines SELECT abzusetzen und ggf. den Fehler auszuwerten.

Auch das SQL Server Managment Studio sendet in regelmässigen Abständen eine kleine SQL-Abfrage um die Verbindung zu testen.
Man kann dazu z.B. folgende Abfragen verwenden:
SQL-Code:
SELECT @@version
-- oder
SELECT 1
Nachtrag:
Der SQL Server bzw. die Treiberschicht auf den Clients ist ziemlich zickig wenn es zu einer Verbindungsunterbrechung kommt.
Wenn z.B. der Client in den Sleep-Modus geht ist die Connection unterbrochen.
Oder wenn ein DNS-Server nicht rechtzeitig antwortet; dito.
Der Treiber ist leider zu doof um die Connection im Hintergrund neu aufzubauen.
Normalerweise kann dann die Anwendung auch nicht mehr gerettet werden.
Man müsste die Connection schliesen und erneut öffnen.
Dabei werden aber auch alle Queries und Tabellen die zu dem Zeitpunkt offen waren geschlossen.

Sir Rufo 16. Jan 2012 17:32

AW: Verbindung zur Datenbank überprüfen
 
Alternativ kann man z.B. auch UniDAC einsetzen.
Da gibt es eine integrierte Fehlbehandlung bei Verbindungsabbrüchen, die man auch beeinflussen kann.

Problematisch ist und bleibt bei einem Verbindungsabbruch immer, dass die originale Session auf dem Server futsch ist, und damit alles was an selbiger hängt.

Locks, Session-Variablen, etc.

mjustin 16. Jan 2012 17:49

AW: Verbindung zur Datenbank überprüfen
 
Zitat:

Zitat von shmia (Beitrag 1146214)
Man müsste die Connection schliesen und erneut öffnen.
Dabei werden aber auch alle Queries und Tabellen die zu dem Zeitpunkt offen waren geschlossen.

Bei dbExpress Clientanwendungen mache ich das regelmäßig so - nach fast jedem Öffnen eines Statements wird die Datenbankverbindung geschlossen, Ausnahmen sind Aktionen die mehrere Queries umfassen (Transaktionen).

Tabellen in Grids etc. werden weiterhin angezeigt, wenn ein ClientDataSet dahintersteht.

Sir Rufo 16. Jan 2012 17:54

AW: Verbindung zur Datenbank überprüfen
 
Wenn man die DataSets alle in ClientDataSets packt dann kann man auch bei der ADOConnection KeepConnection auf False setzen und die Verbindung zur DB wird automatisch geschlossen, wenn kein Zugriff mehr erfolgt.
Der Aufbau erfolgt natürlich auch automatisch.

t0mmy 17. Jan 2012 08:50

AW: Verbindung zur Datenbank überprüfen
 
###Edit: Danke, Hat sich schon erledigt. Ich versuch jetzt jedesmal eine Verbindung zu erstellen und hab mich da bissal mit den Timeout zeiten von den ADOConnections gespielt.

Danke trotzdem


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