milecl
Goto Top

Delphi 2009 Warnung wenn keine Connection

Hallo,

ich habe ein Delphi Programm, welches in einem Firmennetz läuft. Jetzt besteht der Wunsch, eine Fehlermeldung auszugeben, wenn keine Connection zur Datenbank aufgebaut werden kann.

Hat jemand eine Idee, wie man das implementieren kann?

Viele Grüße
milecl

Content-ID: 189999

Url: https://administrator.de/contentid/189999

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

Pjordorf
Pjordorf 22.08.2012 um 15:03:38 Uhr
Goto Top
Hallo,

Zitat von @milecl:
Hat jemand eine Idee, wie man das implementieren kann?
Ist doch eigentlich ganz einfach. Du gehst zu der Stelle in deinem Delphi Quellcode (Pascal, Object Pascal) wo du die Verbindung zur Datenbank versuchst aufzubauen und schaust welche Rückgabewerte oder Fehler kommen können und reagierst entsprechend mit einer (Desktop) Meldung oder einem (System) LOG Eintrag oder was immer du willst was da passieren soll.

Solltest du gezielte Fragen zu einer Stelle deines Quellcodes haben, kannst du dies ja gezielt hier für Hilfe anfragenface-smile

Gruß,
Peter
mrtux
mrtux 22.08.2012 aktualisiert um 15:47:35 Uhr
Goto Top
Hi !

Du kannst die Exception abfangen bzw. überschreiben und durch eigenen Code ersetzen.

mrtux
milecl
milecl 22.08.2012 um 16:05:51 Uhr
Goto Top
Hallo Peter,

beim Klick auf die exe ist im Moment noch gar keine DB- Anbindung erforderlich. Erst bei Login. Nun wollen sie aber, das die exe erst gar nicht startet, wenn keine DB Connection möglich. Müsste ich das dann bei onCreate prüfen?

Viele Grüße
Claudia
Pjordorf
Pjordorf 22.08.2012 um 17:03:07 Uhr
Goto Top
Hallo,

Zitat von @milecl:
erst gar nicht startet, wenn keine DB Connection möglich.
Das wird wohl sehr schwierig werden, oder?face-smile Die zu startende EXE Datei soll erst gestartet werden (Klick durch Anweder) wenn diese auch eine Verbindung zur Datenbank aufbauen kann (könnte). Die EXE Datei soll aber nicht gestartet werden (Klick durch Anwender) wenn die Datenbank nicht verfügbar ist.

Wenn also das starten der EXE Datei durch ein "Klick durch Anwender" erfolgt, wie soll hier also deine EXE Datei wissen das sie starten oder eben nicht starten soll?face-smile Um das festzustellen muss aber die EXE Datei gestartet werden, denn wie sonst kann der entsprechende Code (innerhalb der EXE Datei) ausgeführt werden?

Oder wird die EXE Datei durch eine andere Art als "Klick durch Anwender" gestartet?

Denk dran, wir wissen hier nicht was du alles weist. Wir sind hier Blind und Taub und lesen nur was du uns zum Lesen gibst. Und wir wissen auch nicht was du dir denkst oder vorstellst, denn würden wir das wissen könnten wir deine Gedanken lesen und bräuchten nicht zu ratenface-smile

Du wirst uns entweder noch Informationen liefern müssen, oder selbst deine Frage genauer ausarbeiten, bzw. deine Auftraggeber (Bosse) nach genauerer Information Fragen müssen.

Gruß,
Peter
milecl
milecl 22.08.2012 um 17:41:35 Uhr
Goto Top
Hallo Peter,

genau so, wie Du vermutet hast. Die exe startet durch Klick vom Anwender. Ich dachte, dass es vielleicht so etwas gibt, wie on open oder so ahnlich. Eben das beim Öffnen der exe sofort abgefragt wird, ob die Connection möglich wäre. Sollte das nicht der fAll sein, dann eben eine Fehlermeldung.

Viele Grüße
Claudia
Pjordorf
Pjordorf 22.08.2012 um 18:11:44 Uhr
Goto Top
Hallo,

Zitat von @milecl:
Die exe startet durch Klick vom Anwender.
Und dir ist bewusst das deine Forderung nach
das die exe erst gar nicht startet, wenn keine DB Connection möglich
so niemals erfüllt werden kann. (Nicht in diesem universumface-smile)

wie on open oder so ahnlich
Wird es wohl auch in Delphi (Object Pascal) geben. Aber brauchst du das wirklich?

Eben das beim Öffnen der exe sofort abgefragt wird, ob die Connection möglich wäre. Sollte das nicht der fAll sein, dann eben eine Fehlermeldung.
Dann tu das doch. Bevor dein Hauptprogramm aufgerufen wird (Hauptmaske / Fenster etc.) kannst du doch eine Abfrage auf deine Datenquelle machen und je nach Erreichbarkeit entweder das Hauptprogramm starten oder eben ein anderes Fenster mit dem Hinweis das die Datenquelle xyz nicht verfügbar sei, einen Eintrag ins LOG schreibst und dem Anwender ein OK Button gibst damit Er/Sie die Anwendung benutzergesteuert beendet. Wo du das in deinem Programm einbaust geht aus deinem nur dir bekannten Quellcode hervor.

Gruß,
Peter
mrtux
mrtux 22.08.2012 aktualisiert um 21:27:05 Uhr
Goto Top
Hi!

So arbeitet kein erfahrener Entwickler, man arbeitet normalerweise ereignisorientiert und wertet die Ereignisse aus. Es ist auch völliger Blödsinn den Start einer Exe unterbinden zu wollen. Das geht entweder mit einer zweiten Exe, die vor der eigentlichen Exe gestartet wird oder über eine Batchdatei. Du könntest höchstens nach dem Start der Exe, also zur Laufzeit das Objekt bzw. die Komponente für den Datenbankzugriff erzeugen, die Verbindung prüfen und bei einem negativen Ergebnis der Verbindungsprüfung die Exe wieder beenden. Aber wie gesagt, normalerweise macht man das so eher nicht. Und wenn ich das richtig verstanden habe, sieht das der Kollege Pjordorf ähnlich.

Sei mir nicht böse aber wenn ich solche Threads lese wundert es mich nicht, mit was für Software ich mich manchmal herumärgern muss, wenn ich als reiner Admin unterwegs bin. face-wink

mrtux
exchange
exchange 22.08.2012 um 22:03:45 Uhr
Goto Top
Hallo,
ich sehe da zwei Varianten für dich:

1.) Die Anmeldedaten zum DB Server sind gleich und es existiert eine eigene Benutzerverwaltung:
Beim starten die DB Verbindung herstellen (try except ansehen!) und Anwendung beenden.
Idealerweise lagert man so etwas in einem thread aus, da die Applikation im Timeout für den Anwender "einfriert".

2.) Die Anmeldedaten an der DB sind Benutzerspezifisch:
Versuchen eine Datenbankverbindung aufzubauen (ggf. Testuser) oder Rückmeldung auswerten (z.B. Access Denied oder Timeout).

Was Du dir ansehen solltest sind die Ereignisse on create und on show. Dann noch try except und da sind wir auch an einem wichtigen Punkt.

Ein Programm sollte niemals abstürzen und den Benutzer mit einem Hex Code verabschieden. Logfile und eine freundliche Meldung warum ist immer hilfreich. Auch für das Produkt zu verbessern.

Hast Du überhaupt den Quellcode und den passenden Compiler? Mit Delphi mal etwas auseinander gesetzt? Eigentlich ist das nämlich richtig simpel.

Ansonsten wirst Du ein Ziel leider nicht erfüllt bekommen, die exe startet IMMER, die führt früher nämlich nicht deinen Code aus

Gruß