Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.427 Beiträge
 
Delphi 7 Professional
 
#2

AW: Von hard- auf softcodierten DB-Pfad - es klappt nicht...

  Alt 22. Jun 2019, 18:03
Mache es mit FireBird so:

Einmal als Pfad zur Datenbank im Objektinspektor
Code:
.\Data\Datenbankname.fdb
Die Exe erwartete damit in dem Verzeichnis, in dem sie sich befindet ein Unterverzeichnis Data und in diesem liegt die Datenbankdatei.

Klappt ganz gut (oder bisher fehlerfrei) bei allen Programmen, die sich einschließlich der Datenbankdatei auf 'nem USB-Laufwerk / USB-Stick befinden. Damit ist es egal, welchen Laufwerksbuchstaben das Laufwerk, an welchem Rechner auch immer, bekommt.

Falls ein Programm mit Arbeitsverzeichnis aufgerufen wird (z. B. über eine Verknüpfung), kann das hakelig werden. Da hilft dann beim Programmstart, noch bevor auf die Datenbank zugegriffen wird, ein ChDir(ExtractFilePath(Application.ExeName)); .

Und Datenbanken oder Tabellen werden nie im Objektinspektor mit Active := True versehen, sondern immer erst zur Laufzeit, meist zeitlich etwas verzögert, so dass das Programm schon sichtbar und ansonsten fertig initialisiert ist. Dann kann man vor dem Aufbau der Datenbankverbindung auch problemlos per FileExists(Datenbankkomponente.DataBase) prüfen, ob die Datei auch gefunden wird. Wenn nicht, gibt's halt eine sinnvolle Fehlermeldung, statt einer für den Anwender eher irreführenden Exception.

Die im Objektinspektor vorgenommenen Einstellungen werden "lange vor" dem CreateForm abgearbeitet, so dass eine im Objektinspektor geöffnete Datenbankverbindung im CreateForm schon aktiv ist. Irgendwelche dort vorgenommenen Konfigurationsänderungen sind dann leider zu spät.
  Mit Zitat antworten Zitat