Hallo,
Zitat von
daredd:
Jetzt bekomme ich aber wenn ich das hier mache:
Delphi-Quellcode:
procedure TDM.ConnectTuneDatabase;
begin
while IsServiceInstalled(nil, InterBaseServer) and IsServiceInstalled(nil, InterBaseGuardian)
do
if ConnectToDatabase(dbTune, SlashSep(BasePath, 'data\d1.gdb')) then begin
OpenTuneTables(True);
end;
end;
end;
diese Fehlermeldung:
Was wird denn das, wenn es fertig ist?
Klar, die Service-Namen gehören in Hochkommata, das hast Du schon erfahren.
Aber Du versuchst herauszufunden, ob zwei bestimmte lokale Dienste installiert sind: InterBaseServer und InterBaseGuardian. Warum?!
Dazu folgende Anmerkungen:
- Die Dienste können zwar installiert, aber nicht gestartet sein. Das prüfst Du aber bislang nicht.
- Der InterBaseServer funkioniert auch prima, wenn der InterBaseGuardian NICHT installiert ist.
- Der InterBaseServer muss nicht notwendigerweise als Dienst laufen, man kann ihn auch als normale Anwendung (mit Tray-Icon) starten.
- Falls statt Interbase die OpenSource-Variante Firebird zum Einsatz kommt, müsstest Du auf ganz andere Service-Namen prüfen.
- Bei lokalen Datenbanken (Single-User) und Firebird kommt man auch ganz ohne Dienst aus; eine kleine DLL im Verzeichnis Deiner Anwendung beinhaltet den sog. Embedded Server -- ganz ohne Installation.
- Die Datenbank kann sich ja auch auf einem Server im Netzwerk befinden; wenn Du den Servername nicht kennst oder keine Rechte für die Remote-Abfrage hast, schlägt obiger Code sowieso fehl.
Zusammenfassung:
Nur unter ganz eng definierten Bedingungen ist es sinnvoll zu prüfen, ob der Interbase-Dienst installiert
und gestartet ist. In allen anderen Fällen ist es unkomplizierter, einfach einen Versuch zu starten und die Datenbank zu öffnen. Im Fehlerfall kannst Du aus der Fehlermeldung ablesen, was schief gegangen ist
Achim