Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi läuft der Firebird Server ? - ohne vohandene Datenbank (https://www.delphipraxis.net/121970-laeuft-der-firebird-server-ohne-vohandene-datenbank.html)

haentschman 7. Okt 2008 18:47

Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos

läuft der Firebird Server ? - ohne vohandene Datenbank
 
Hallo an alle... :hi:

Ich bräuchte mal wieder die Richtung. :wink:

wie kann ich aus Delphi heraus ohne vorhandene Datenbank ermitteln:
- ob der Firebird Server im lokalen Netz läuft... ggf. auf welchem Computer
- ob der Server reagiert sprich funktionsfähig ist

Hintergrund:
- Ich möchte das im Vorfeld prüfen bevor eine Datenbank erzeugt wird. Macht Sinn oder ? :gruebel:
- Ich hatte bei einer Ferninstallation per Telefon meines Programmes das Problem, daß immer ein Verbindungsfehler auflief, ich aber evt. Schreibfehler in den Pfadangaben nicht sehen konnte und der Computerfachmann auf der anderen Seite des Telefons versicherte, daß der Server läuft. Mit diversen Tricks haben wir es dann zum Laufen bekommen.
- Ich möchte einfach die Erstinstallation "Idiotensicher" machen damit ich weniger telefonieren muß :wink:

Danke für Infos...

sx2008 7. Okt 2008 19:32

Re: läuft der Firebird Server ? - ohne vohandene Datenbank
 
Du könntest
1.) den Rechner anpingen

2.) prüfen, ob in der Datei %SYSTEM32%\etc\drivers\protocol ein Eintrag vorhanden ist, der mit "gds_db" beginnt
Falls der Eintrag fehlt, grosse Fehlermeldung ausgeben, dass der Administrator das ändern muss
bzw. selbst versuchen die Zeile
Code:
gds_db           3050
anzuhängen.

3.) über TCP/IP eine Verbindung zum Server über Port gds_db herstellen und gleich wieder schliesen
Wenn das klappt stehen die Chancen gut, dass da ein Firebird Server übers Netz erreichbar ist.

haentschman 8. Okt 2008 17:41

Re: läuft der Firebird Server ? - ohne vohandene Datenbank
 
Hallo...

Danke für Deine Antwort. Ich habe dann mal bei mir geschaut... :gruebel: Der Eintrag ist bei mir nicht vorhanden und der Server läuft und arbeitet...

der Inhalt von %System32%\drivers\etc\protokoll
Zitat:

ip 0 IP # Internet Protocol
icmp 1 ICMP # Internet Control Message Protocol
ggp 3 GGP # Gateway-Gateway Protocol
tcp 6 TCP # Transmission Control Protocol
egp 8 EGP # Exterior Gateway Protocol
pup 12 PUP # PARC Universal Packet Protocol
udp 17 UDP # User Datagram Protocol
hmp 20 HMP # Host Monitoring Protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "Reliable Datagram" Protocol
rvd 66 RVD # MIT Remote Virtual Disk
...und nun :gruebel:

...ich versuche mich parallel durch die Firebirdseite zu forsten :roll:

mkinzler 8. Okt 2008 17:51

Re: läuft der Firebird Server ? - ohne vohandene Datenbank
 
Der Eintrag existiert nicht, also wurde höchstwahrscheinlich von diesem Rechner noch auf keinen externe FireBird-Server zugegriffen

RWarnecke 8. Okt 2008 17:51

Re: läuft der Firebird Server ? - ohne vohandene Datenbank
 
Ich bin der Meinung, dass Du das garnicht so machen kannst. Ausser Du prüfst remote, ob der Dienst auf dem Rechner läuft. Wenn der Dienst läuft ist alles gut, ansonsten Fehlermeldung. Es wird nur schwierig, wenn Firebird auf einem Linux-Rechner läuft.
Denn wenn der Firebird-Dienst auf dem Server läuft ist ja noch nicht klar ob Du eine Datenbank erstellen kannst. Deshalb würde ich einfach versuchen, die Datenbank zu erstellen und dann die entsprechende Fehlermeldung ausgeben. Danach kann dann der User dementsprechend handeln.

haentschman 8. Okt 2008 18:10

Re: läuft der Firebird Server ? - ohne vohandene Datenbank
 
Danke an alle...

Zitat:

Deshalb würde ich einfach versuchen, die Datenbank zu erstellen und dann die entsprechende Fehlermeldung ausgeben. Danach kann dann der User dementsprechend handeln.
...so läuft es ja im Moment.

Ich hatte nur die Hoffnung eine Procedure zu haben, wo ich im Ergebnis unterscheiden kann, ob der Server vorhanden / läuft oder nicht oder die Datenbank wegen z.B. unzureichender Schreibrechte auf das Verzeichnis der Wahl des Kunden nicht erzeugt werden kann.

Mir geht es um eine Differenzierung.

PS:
...ich weiß nicht ob Ihr´s wußtet :wink:
erschwerend ist noch, daß ich das ZConnection.Connect in einem try/except Block stehen habe. Nun lese ich im AfterConnect diverse Daten ein. Tritt in einer dieser Einleseproceduren ein Fehler auf läuft das Programm in den except Block von ZConnection.Connect. :gruebel:
d.h. ich kann im Moment nicht richtig unterscheiden wo der Fehler auftritt...
- Als Lösung fiel mir bisher nur ein, daß ich eine Variable entsprechend der Ablaufposition setze und diese dann im except auswerten kann und somit die Fehlerposition eingrenze.
...andere Vorschläge sind auch willkommen :thumb:

hoika 9. Okt 2008 13:06

Re: läuft der Firebird Server ? - ohne vohandene Datenbank
 
Hallo,

1. setze alle Einlesepürozeduren auch in ein try except
2. oder, erzeuge eigene Exceptions

Zu dem Server-Finden-Problem.

Du kannst ja das Services-API benutzen.
Z.B. die die Versionsnummer auslesen.

Dazu muss du aber zumindestens einen gültigen User-Name haben.


Heiko

Lemmy 9. Okt 2008 14:01

Re: läuft der Firebird Server ? - ohne vohandene Datenbank
 
Hi,

Zitat:

Zitat von sx2008
2.) prüfen, ob in der Datei %SYSTEM32%\etc\drivers\protocol ein Eintrag vorhanden ist, der mit "gds_db" beginnt
Falls der Eintrag fehlt, grosse Fehlermeldung ausgeben, dass der Administrator das ändern muss
bzw. selbst versuchen die Zeile
Code:
gds_db           3050
anzuhängen.

was das bringen soll ist mir echt ein Rätsel. Es gehört zum "guten Ton" dass eine Anwendung die einen Port benötigt sich dort auch einträgt - funktionell spielt das absolut keine ROlle.

Wenn da kein Eintrag ist, vermute ich ganz stark, dass die FB-Installation durch das Entpacken der ZIP-Datei vorgenommen wurde und nicht mit dem Setup-Programm.


Zitat:

Zitat von haentschman
...ich weiß nicht ob Ihr´s wußtet Wink
erschwerend ist noch, daß ich das ZConnection.Connect in einem try/except Block stehen habe. Nun lese ich im AfterConnect diverse Daten ein. Tritt in einer dieser Einleseproceduren ein Fehler auf läuft das Programm in den except Block von ZConnection.Connect. Grübelnd...
d.h. ich kann im Moment nicht richtig unterscheiden wo der Fehler auftritt...
- Als Lösung fiel mir bisher nur ein, daß ich eine Variable entsprechend der Ablaufposition setze und diese dann im except auswerten kann und somit die Fehlerposition eingrenze.
...andere Vorschläge sind auch willkommen Thumbs up!

Ist doch ganz einfach: Mach vor dem eigentlichen Connect auf die DB einen Connect mit einer weiteren ZConnectionInstanz - bzw. schreib dir ne Methode:

Delphi-Quellcode:
function IsFBServerRunning(AServerIP:String):Boolean;
var oZConnection:TZConnection;
begin
  oZConnection:=TZConnection.Create();
  try
    oZConnection.xxx:=AServerIP;
    try
      oZConnection.Connect;
      result:=true;
    except
      result:=false;
    end;
  finally
    FreeAndNil(oZConnection);
  end;
end;
Hinweis: Den Code habe ich "frei Hand" geschrieben - keinen Anspruch auf Vollständigkeit!

wenn Du es noch besonders korrekt machen willst, überprüfst Du im Except-Fall einfach die zurückgelieferte Exception ab und wertest die aus. Noch eine Verbesserung: Du kannst den Server ja vor dem eigentlichen Connect mit der TZConnection auch noch anpingen - dann weißt Du wenigstens dass sich grundsätzlich jemand meldet....

Grüße
Lemmy


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