AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Still prüfen, ob SQL Server verfügbar ist
Thema durchsuchen
Ansicht
Themen-Optionen

Still prüfen, ob SQL Server verfügbar ist

Ein Thema von cltom · begonnen am 2. Nov 2022 · letzter Beitrag vom 9. Nov 2022
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: Still prüfen, ob SQL Server verfügbar ist

  Alt 2. Nov 2022, 15:37
Ich arbeite mit UniDAC und mache das bisher auch immer ganz simpel in einem try..except.

Ganz vereinfacht:

Delphi-Quellcode:
try
  SQLCon.Connect;
except
  GlobalLog.Add('Verbindungsversuch zu '+SQLCon.Servername+' fehlgeschlagen');
end;
Man sollte allerdings um es ganz korrekt zu haben, die Exception-Klasse auch auswerten.

Das am liebsten in einem Thread, sodass mir das UI beim Warten auf den Timeout nicht einfriert. Wirft keine sichtbaren Exceptions. (Man braucht aber natürlich einen SQL-User dafür, der sich zumindest verbinden darf. Ansonsten bräuchte es ja ein Login-Prompt.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
230 Beiträge
 
Delphi 12 Athens
 
#2

AW: Still prüfen, ob SQL Server verfügbar ist

  Alt 2. Nov 2022, 18:03
Ich arbeite mit UniDAC und mache das bisher auch immer ganz simpel in einem try..except.

Ganz vereinfacht:

Delphi-Quellcode:
try
  SQLCon.Connect;
except
  GlobalLog.Add('Verbindungsversuch zu '+SQLCon.Servername+' fehlgeschlagen');
end;
Man sollte allerdings um es ganz korrekt zu haben, die Exception-Klasse auch auswerten.

Das am liebsten in einem Thread, sodass mir das UI beim Warten auf den Timeout nicht einfriert. Wirft keine sichtbaren Exceptions. (Man braucht aber natürlich einen SQL-User dafür, der sich zumindest verbinden darf. Ansonsten bräuchte es ja ein Login-Prompt.)
Danke Dir! Einen Thread aufzumachen ist wohl eine Variante, um das Hourglass zu vermeiden. Elegant ist ja, wenn der User nicht offensichtlich mitkriegt, dass man erst mal nachschaut, ob der Server verfügbar ist.

Ich dachte an ein einfaches Ping, das mir true/false zurückgibt ...
  Mit Zitat antworten Zitat
dstein

Registriert seit: 28. Jul 2005
Ort: Dormagen
57 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Still prüfen, ob SQL Server verfügbar ist

  Alt 2. Nov 2022, 18:21
ich verbinde mich mit einer MS SQL Serverdatenbank, wenn der Server nicht vorhanden ist dauert es ca. 12 Sekunden bis UniConnectionMainError einen Error zurück gibt.
Ich habe bei Devart (Pavel Podlepinskiy) mal ein Ticket aufgemacht ob es einen Weg gibt um die Antwortzeit zu verkürzen.
Denn ein Connect erfolgt in einer Sekunde, aber wenn Connect misslingt ca. 12 Sekunden.
Obwohl: UniConnectionMain.SpecificOptions.Values['ConnectionTimeout'] := '1';
Dirk
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.531 Beiträge
 
Delphi 12 Athens
 
#4

AW: Still prüfen, ob SQL Server verfügbar ist

  Alt 2. Nov 2022, 21:30
Beim pgDAC und DataSnap hab ich auch schon mehrmals mitbekommen, dass einige Timeout-Settings gern ignoriert werden.

Aber dafür gibt es oft eine gute Lösung.
In der neusten Version hat Emba jene Timeoutproperties bei sich gelöscht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
dstein

Registriert seit: 28. Jul 2005
Ort: Dormagen
57 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Still prüfen, ob SQL Server verfügbar ist

  Alt 9. Nov 2022, 14:37
Nachtrag!
Wenn der Provider nicht auf "prAuto" sondern expliziet auf prDirect, prNativeClient oder prMSOLEDB steht.
Dann erhalte ich eine Rückmeldung, das der Server nicht verfügbar ist innerhalb von 2-3 Sekunden.

UniConnectionMain.SpecificOptions.Values['Provider']:='prNativeClient';
{ prDirect, prAuto,prSQL,prNativeClient,prCompact,prMSOLEDB}
UniConnectionMain.SpecificOptions.Values['ConnectionTimeout']:='1';
Dirk
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz