Datenbank: Absolute Database • Version: 7.91 • Zugriff über: embedded DB
Von hard- auf softcodierten DB-Pfad - es klappt nicht...
Hallo Community,
ich benutze die neueste Version (7.91) von Absolute Database. Für die Entwicklungsphase setze ich die Tabellen-Eigenschaften generell z.B.
Delphi-Quellcode:
Ich möchte erreichen, daß die fertige Exe aus jedem Verzeichnis heraus die Datenbank findet. Dazu gehe ich wie folgt vor:
Table1.Active := True;
Delphi-Quellcode:
Wenn ich die DB zum Testen des obigen "SoftCodes" verschiebe oder umbenenne und die EXE aus einem anderen Verzeichnis heraus starte, kommt es zu einer Exception, wobei die ursprünglich in der Property vorhandene „hardcodierte“ Pfad namentlich vermißt wird, obwohl ich diesen eigentlich überschrieben habe…
CONST
MyDB_Name = 'MyDB.abs'; Pfad_relativ = '..\..\'; ... procedure TForm1.CreateForm(Sender: TObject); begin MyDB.DatabaseFileName := ExtractFilePath(Application.ExeName) + Pfad_relativ + MyDB_Name; MyDB.Open; Tabelle1.Open; Tabelle2.Open; end; Anscheinend wird intern bereits VOR obigem TForm1.CreateForm auf die Datenbank zugegriffen. Kennt jemand eine Abhilfe? Danke im Voraus! Gruß Andreas |
AW: Von hard- auf softcodierten DB-Pfad - es klappt nicht...
Mache es mit FireBird so:
Einmal als Pfad zur Datenbank im Objektinspektor
Code:
Die Exe erwartete damit in dem Verzeichnis, in dem sie sich befindet ein Unterverzeichnis Data und in diesem liegt die Datenbankdatei.
.\Data\Datenbankname.fdb
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
Delphi-Quellcode:
.
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
Delphi-Quellcode:
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.
FileExists(Datenbankkomponente.DataBase)
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. |
AW: Von hard- auf softcodierten DB-Pfad - es klappt nicht...
Zitat:
|
AW: Von hard- auf softcodierten DB-Pfad - es klappt nicht...
Vielen Dank für die wertvollen Tipps & Hinweise!
Gruß Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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