Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verbindung zu Datenbank prüfen (https://www.delphipraxis.net/118742-verbindung-zu-datenbank-pruefen.html)

Opa Knack 14. Aug 2008 01:16

Datenbank: MySQL • Version: 5 • Zugriff über: SciBit MyComponents

Verbindung zu Datenbank prüfen
 
Hallo,

auch wenn diese Frage hier wahrscheinlich schon gestellt wurde: Ich habe die Antwort trotz intensiver Suche nicht finden können. Liegt wohl an der Uhrzeit.

Folgendes Problem: Ich greife mit MyComponents auf eine MySQL-Datenbank zu (da ich ein ungeduldiger Mensch bin, habe ich nach mehreren Versuchen davon abgelassen, ZEOS verwenden zu wollen). Um sicherzustellen, dass die Datenbank auch wirklich verfügbar ist, möchte ich die Verbindung beim Programmstart abfragen. Rein aus meinem (wahrscheinlich zu kruden) Verständnis heraus habe ich's mit

Delphi-Quellcode:
       
try
  DBServer.Connect;
except
  showmessage('geht nicht');
end;
probiert, was zur Folge hat, dass nach dem Programmstart erst einmal nichts geschieht, bis ich dann irgendwann eine Fehlermeldung erhalte - aber leider nicht mein (besonders einfallsreiches) "geht nicht".

Meine Frage ist nun, wie ich die Verbindung testen und bei Nichtbestehen darauf reagieren kann.

Vielen Dank und gute Nacht
Opa

mkinzler 14. Aug 2008 05:37

Re: Verbindung zu Datenbank prüfen
 
Du behandelst ja keine Exception
Delphi-Quellcode:
on Exception ...

marabu 14. Aug 2008 07:53

Re: Verbindung zu Datenbank prüfen
 
Moin Opa,

so kannst du den genauen Grund für das Nichtzustandekommen der Verbindung an den Benutzer melden:

Delphi-Quellcode:
try
  DBServer.Connect;
except
  on E: Exception do
    ShowMessage(E.Message);
end;
Beim Ereignis AfterConnect() kannst du dann die nötigen DataSets öffnen.

Freundliche Grüße

Andreas H. 14. Aug 2008 11:31

Re: Verbindung zu Datenbank prüfen
 
Hm,

trotzdem müsste doch "geht nicht" kommen, oder?

marabu 14. Aug 2008 12:20

Re: Verbindung zu Datenbank prüfen
 
Hallo,

sicher doch. Oft wird die IDE aber im Debug-Modus betrieben, so dass die echten Exceptions durchschlagen, bevor die eigene Fehlerbehandlung greift. Der von Markus skizzierte und von mir ausgefeilte Code erlaubt lediglich den Zugriff auf die Exception selbst, was ein paar Optionen bei der eigenen Fehlerbehandlung schafft.

Freundliche Grüße

Opa Knack 14. Aug 2008 23:16

Re: Verbindung zu Datenbank prüfen
 
Hallo,

erst einmal Danke für die bisherigen Tipps. Geholfen haben sie mir leider nicht.

Ich habe die beiden mir logischen Varianten (einmal direkt aus Delphi heraus, einmal ohne Delphi im Hintergrund) ausprobiert und bekomme trotzdem jedesmal die gleiche Fehlermeldung. Theoretisch bräuchte ich etwas in der Art "database.available" (wobei es das natürlich nicht gibt), mir dem ich beim Versuch des Connects prüfen kann, ob dieser auch wirklich stattgefunden hat bzw. mit dem ich prüfen kann, ob die Datenbank überhaupt erreichbar ist. Klar könnte ich auch den herkömmlichen Fehlerhinweis verwenden, nur ist der a) in englisch und b) nicht besonders hilfreich. Dem Anwender sollen die möglichen Fehlerursachen (falsche Logindaten, Datenbank nicht verfügbar) aufgezeigt werden.

Habt ihr noch weitere Ideen?

Danke und Gruß
Opa

mkinzler 15. Aug 2008 05:34

Re: Verbindung zu Datenbank prüfen
 
Angaben zum Grund sollte das Exception-Objekt liefern

automatix 15. Aug 2008 07:47

Re: Verbindung zu Datenbank prüfen
 
Hallo!

Wie das bei mysql aussieht, weiß ich nicht genau, aber bei anderen Datenbanken hilft es eine Transaktion zu starten und bei einer Exception besteht keine Verbindung zur Datenbank. Bei bestehender Verbindung muss man diese (leere) Transaktion dann noch mit Commit oder Rollback beenden.

Grüße

shmia 15. Aug 2008 09:53

Re: Verbindung zu Datenbank prüfen
 
Zitat:

Zitat von Opa Knack
Um sicherzustellen, dass die Datenbank auch wirklich verfügbar ist, möchte ich die Verbindung beim Programmstart abfragen.

Dein Ansatz ist schon falsch!!
Man prüft nicht, ob eine Datenbank vorhanden ist und verbindet sich dann zur Datenbank.
Das wäre eine sinnlose Prüfung.
Könnte ja sein, dass die Datenbank genau zwischen der Prüfung und dem wirklichen Verbinden runtergefahren wird.
Nein, man verbindet sich einfach zur Datenbank und entweder es klappt oder es klappt nicht.
Wenn es nicht klappt, dann gibt man dem Benutzer eine aussagekräftige Meldung; das ist ganz wichtig!
Delphi-Quellcode:
try
  DBServer.Connect;
except
  on E: Exception do
  begin
    // wir geben dem Benutzer ein Maximum in Infos
    // was ist passiert, welche Datenbank und was war der eigentliche Fehler ? 
    E.Message := 'Verbindung zur Datenbank '+DBServer.DatabaseName + ' fehlgeschlagen!'#13#10+
      E.Message;
    raise;  // Exception erneut auslösen
  end;
end;


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