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
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 2. Nov 2022, 11:27
Datenbank: SQL Server • Version: 2019 • Zugriff über: Zeos/UniDac
Hallo,

ein Thema, bei dem ich strauchle, aber auch keine gute Lösung finde.

Es soll die Verfügbarkeit eines SQL-Servers geprüft werden, aber ohne User-Interaktion. Ich verwende ZeosLib, hab nun aber auch Unidac verfügbar. Ich hab es mit ZConnection.Ping probiert, das klappt aber nicht, da wirft er bei nicht-Verfügbarkeit einen Fehler. Ich hab es mit Exceptions um das Connect probiert, aber da kommt ebenso die Exception. In jedem Fall ist es auch für den User sichtbar, dass mal "nichts" passiert und das Programm reagiert mal nicht. Ich hab auch versucht, den Timeout zu reduzieren, das klappt auch nicht (warum auch immer: der Timeout-Wert scheint ignoriert zu werden).

Ideal wäre es, wenn ich "still" testen kann, ob der Server verfügbar ist, ohne dass Sekunden vergehen, wo der User nichts machen kann.

Danke für Ideen!

gruß
tom
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 2. Nov 2022, 12:01
Es gibt unter den meisten "Connection" varianten auch eine "Connected" Property, wenn diese "False" ist, sollte der Server offline sein.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
dstein

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

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

  Alt 2. Nov 2022, 13:44
Ich benuze UNIDac anbei ein kleines TestPrg.
Nur einen SQL Server anpingen ob der da ist ist doch zu wenig, du willst doch wissen ob eine Datenbank / Instance erreichbar ist.
In meinem kleinen Sample gibt die Connection einen Wert zurück.
Evtl. eine Gedankenanregung.
Gruß Dirk
Angehängte Dateien
Dateityp: zip UniDAC_Connecting2022.zip (3,0 KB, 15x aufgerufen)
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
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#4

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

  Alt 2. Nov 2022, 16: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
221 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 2. Nov 2022, 18:54
Es gibt unter den meisten "Connection" varianten auch eine "Connected" Property, wenn diese "False" ist, sollte der Server offline sein.
ok, aber zuerst muss ich ja mal versuchen, zu verbinden. Und wenn der Server da nicht zu erreichen ist, wirft es schon eine Exception. Danach kann ich, wie Du beschreibst testen, ob ich verbunden bin. Aber da hab ich den Schritt, den ich suche, bereits hinter mir.
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 2. Nov 2022, 19:01
Ich benuze UNIDac anbei ein kleines TestPrg.
Nur einen SQL Server anpingen ob der da ist ist doch zu wenig, du willst doch wissen ob eine Datenbank / Instance erreichbar ist.
In meinem kleinen Sample gibt die Connection einen Wert zurück.
Evtl. eine Gedankenanregung.
Gruß Dirk
Danke für das Beispiel. Es gibt auch hier ein sichtbares einfrieren/warten auf die Verbindung, aber ja, die Exception wird so schön im Hintergrund gehalten, ohne dass eine Meldung kommt. Mit dem Vorschlag weiter unten, einen Thread aufzumachen wird das wohl die Lösung sein. Danke!
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 2. Nov 2022, 19: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
53 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

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

  Alt 2. Nov 2022, 19: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

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

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

  Alt 2. Nov 2022, 22: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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
dstein

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

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

  Alt 9. Nov 2022, 15: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 18:27 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