Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird installiert (https://www.delphipraxis.net/99288-firebird-installiert.html)

hanspeter 10. Sep 2007 09:10


Firebird installiert
 
Hallo,
ich habe im Forum keine Antwort gefunden.

Wie kann ich aus Delphi heraus prüfen, ob Firebird installiert ist.
Ein Programm erzeugt die Datenbank.
Im Moment habe ich den Aufruf TibDatabase.CreateDatabase mit try except
gekapselt und fordere im exept auf, die Datenbank Installation zu prüfen.

Ich hätte es gern eleganter, so daß bereits beim Start des Programms eine
Meldung kommt: "Bitte installieren Sie erst die Datenbank".

Für einen Tip dankbar.

Gruß
Peter

mkinzler 10. Sep 2007 09:17

Re: Firebird installiert
 
Muss das DBMS lokal laufen?
Dann könnte man nach dem Namen des Dienstes suchen.
Oder auf den Port zugreifen, Service API verwenden.

mschaefer 10. Sep 2007 09:27

Re: Firebird installiert
 
Moin, moin in die Runde,

würde nacheinem offenen Port auf 3050 schauen: PortScan.

Grüße // Martin

dataspider 10. Sep 2007 09:30

Re: Firebird installiert
 
Hi,

ich denke, dass Exceptionbehandlung hier schon richtig ist.
Es sollte auch ein Ereignis onError oder so an der Connection geben.
Dann kann man sehr elegant die Errorcodes auswerten:
Delphi-Quellcode:
case ERRCODE of
  isc_login {335544472}:       msg := 'Benutzername oder Passwort falsch';
  isc_shutdown{335544528}:     msg := 'Datenbank heruntergefahren - Wartung';
  isc_network_error{335544721}: msg := 'Kein Server gestartet';
  ...
end;
Cu, Frank

TBx 10. Sep 2007 09:40

Re: Firebird installiert
 
- um zu ermitteln, ob denn überhaupt eine Datenbankverbindung möglich ist, würde ich erst einmal nachgucken, ob die Client-DLL da ist.
- wenn der DB-Server lokal vorliegen soll (warum auch immer) würde ich nachgucken, ob der entsprechende Dienst installiert ist
Dannach dann das beschriebene Exceptionhandling, da ein installierter DB-Dienst bzw. eine vorliegende Client-DLL noch keine Funktion garantiert

Gruß

onlinekater

PS: @mschaefer Von der Überprüfung des Ports kann ich nur abraten, da dieser für den Firebird/Interbase frei wählbar ist. Außerdem, wer garantiert mir, dass nicht irgend jemand anderer den Port für sich registriert?

Amiga-Fan 10. Sep 2007 09:41

Re: Firebird installiert
 
du kannst beim programmstart das datenmodul createn und wenn dabei eine exception auftritt, ist Firebird nicht installiert, so habe ich es gemacht und es funktioniert.

hanspeter 10. Sep 2007 09:57

Re: Firebird installiert
 
Zitat:

Zitat von dataspider
Hi,

ich denke, dass Exceptionbehandlung hier schon richtig ist.
Es sollte auch ein Ereignis onError oder so an der Connection geben.
Dann kann man sehr elegant die Errorcodes auswerten:
Delphi-Quellcode:
case ERRCODE of
  isc_login {335544472}:       msg := 'Benutzername oder Passwort falsch';
  isc_shutdown{335544528}:     msg := 'Datenbank heruntergefahren - Wartung';
  isc_network_error{335544721}: msg := 'Kein Server gestartet';
  ...
end;
Cu, Frank

So mache ich es im Moment.
Das Programm ist Bestandteil einer Installation.
Ich möchte eigentlich am Anfang schon prüfen, ob Firebird überhaupt vorhanden ist und wenn nicht,
dann erst die Fb Installation starten.
Da Datenbanken FB 1.5 und >= 2.0 nicht mehr kompatibel sind, müsste ich ja auch noch die installierte
Version prüfen. Der Anwender müsste dann über ein Update entscheiden.
Einfach die neuere Version drüberbüglen, da mache ich mir bestimmt keine Freunde.

Gruß
Peter

DP-Maintenance 10. Sep 2007 10:00

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Ich denke, das ist hier besser aufgehoben.

mkinzler 10. Sep 2007 10:03

Re: Firebird installiert
 
Zitat:

Da Datenbanken FB 1.5 und >= 2.0 nicht mehr kompatibel sind,
Warum nicht? Es gibt nur Probleme mit Programmen mit inkorrekten Abfragen, welche beim 2er nicht mehre ignoriert werden.
Ich würde hier auch keine Automatik verwenden, sondern den Anwender fragen. Er könnte ja auch wünschen auf einen externen Datenbestand zuzugreifen. Bei rein lokaler Verwendung wäre vielleicht auch die embedded-Version eine Alternative oder du startest die passende Serverversion, welche du in ein Unterverzeichnis deines Programmes kopierst, bei Programmstart; so machen es auch andere.

hanspeter 10. Sep 2007 10:27

Re: Firebird installiert
 
Zitat:

Zitat von mkinzler
[Warum nicht? Es gibt nur Probleme mit Programmen mit inkorrekten Abfragen, welche beim 2er nicht mehre ignoriert werden.
Ich würde hier auch keine Automatik verwenden, sondern den Anwender fragen. Er könnte ja auch wünschen auf einen externen Datenbestand zuzugreifen. Bei rein lokaler Verwendung wäre vielleicht auch die embedded-Version eine Alternative oder du startest die passende Serverversion, welche du in ein Unterverzeichnis deines Programmes kopierst, bei Programmstart; so machen es auch andere.

Das stimmt so nicht.
Ich verwende (noch) IBObjects und da kann eine FB 2.0 nicht mit Datenbanken, die unter 1.5 erstellt wurden und umgekehrt.
Bereits beim Connect zu der Datenbank kommt ein Fehler.
Für solche Fälle hilft im IBexpert Backup der Datenbank und Restore unter 2.0.
Die Anwendung ist übrigens eine große Netzwerkanwendung, die ich von Paradox auf FB umgestellt habe.
Das Tool muß einmalig auf dem Server laufen und konvertiert die Paradoxdaten nach FB.
Aus diesem Grund muss ich auch prüfen, ob die korrekte FB Version installiert ist.

Gruß
Peter

TBx 10. Sep 2007 10:31

Re: Firebird installiert
 
Zitat:

Zitat von hanspeter
Ich verwende (noch) IBObjects und da kann eine FB 2.0 nicht mit Datenbanken, die unter 1.5 erstellt wurden und umgekehrt.

Das liegt allerdings nicht an den IBObjects sondern daran, dass eine andere ODS Anwendung findet.
Wenn Du meherer Interbase/Firebird-Versionen unterstützen möchtest, solltest Du die Datenbanken bei Programmistallation per Skript erzeugen.

Gruß

onlinekater

mkinzler 10. Sep 2007 10:32

Re: Firebird installiert
 
Das ist dann aber kein Problem von FireBird, sondern von IBObects. Den grundsätzlich laufen alte Datenbanken problemlos auf der neuen Serverversion. Wobei es natürlich besser ist auf die neue ODS umzustellen.

hanspeter 10. Sep 2007 10:37

Re: Firebird installiert
 
Zitat:

Zitat von onlinekater
Zitat:

Zitat von hanspeter
Ich verwende (noch) IBObjects und da kann eine FB 2.0 nicht mit Datenbanken, die unter 1.5 erstellt wurden und umgekehrt.

Das liegt allerdings nicht an den IBObjects sondern daran, dass eine andere ODS Anwendung findet.
Wenn Du meherer Interbase/Firebird-Versionen unterstützen möchtest, solltest Du die Datenbanken bei Programmistallation per Skript erzeugen.

Gruß

onlinekater

Genau das macht das Programm.
Das es am ODS liegt ist mir bekannt, es ging nur um die Feststellung das 1.5 und 2.0 kompatibel wären, was definitiv nicht
der Fall ist.
Da es um eine Serveranwendung geht, kann ich nicht einfach die neuere Version installieren.
Das Programm selbst läuft mit 1.5 und >= 2.0 problemlos.

Ich suche eigentlich nur eine Möglichkeit, sofort nach dem Programmstart eine Meldung
"Bitte Installieren Sie erst das Datenbanksystem Firebird auf dem Rechner" erscheint und nicht erst
unnütz Verzeichnisse u.s.w. eingegeben werden müssen.

Gruß
Peter

hanspeter 10. Sep 2007 12:40

Re: Firebird installiert
 
So ich mache es jetzt zweistufig.

Ich frage erst den Key in der Registry HKLM ab, ob überhaupt ein Fb installiert ist.

Delphi-Quellcode:
s := '\Software\Firebird Project\Firebird Server\Instances';
  if Reg.KeyExists(s) then
  begin
    Reg.OpenKey(s,false);
    s := Reg.ReadString('DefaultInstance');
Ist das nicht der Fall, dann kann ich davon ausgehen, das FB noch nicht installiert ist.
In Instances steht Firebird und Version (z.B. "Firebird_2_0").
Die Version selbst werte ich dann nach dem Connect zur Datenbank aus. Bzw. ich werte die Fehlernummer beim
Database Create aus.


Gruß
Peter


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