![]() |
Datenbank: SQL Server • Version: 2019 • Zugriff über: Zeos/UniDac
Still prüfen, ob SQL Server verfügbar ist
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 |
AW: Still prüfen, ob SQL Server verfügbar ist
Es gibt unter den meisten "Connection" varianten auch eine "Connected" Property, wenn diese "False" ist, sollte der Server offline sein.
|
AW: Still prüfen, ob SQL Server verfügbar ist
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
AW: Still prüfen, ob SQL Server verfügbar ist
Ich arbeite mit UniDAC und mache das bisher auch immer ganz simpel in einem try..except.
Ganz vereinfacht:
Delphi-Quellcode:
Man sollte allerdings um es ganz korrekt zu haben, die Exception-Klasse auch auswerten.
try
SQLCon.Connect; except GlobalLog.Add('Verbindungsversuch zu '+SQLCon.Servername+' fehlgeschlagen'); end; 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.) |
AW: Still prüfen, ob SQL Server verfügbar ist
Zitat:
|
AW: Still prüfen, ob SQL Server verfügbar ist
Zitat:
|
AW: Still prüfen, ob SQL Server verfügbar ist
Zitat:
Ich dachte an ein einfaches Ping, das mir true/false zurückgibt ... :stupid: |
AW: Still prüfen, ob SQL Server verfügbar ist
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'; |
AW: Still prüfen, ob SQL Server verfügbar ist
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. :stupid: |
AW: Still prüfen, ob SQL Server verfügbar ist
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'; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz