TIBConnection und absoluter Pfad

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Joh
Lazarusforum e. V.
Beiträge: 77
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.4 x64 FPC 3.2.2)
CPU-Target: 64Bit

TIBConnection und absoluter Pfad

Beitrag von Joh »

Moin,

ich habe ein Problem mit der TIBConnection. In der Entwicklungsumgebung steht ja blöderweise nur der absolute Pfad. Sonst geht's leider nicht.
Den Komfort, in der IDE die Datewn sichtbar zu haben, möchte ich schon haben. Also Connected auf true und fertig.
Jetzt steht beim Kunden die exe in einem anderen Verzeichnis und es läuft latürnich nicht mehr.

Beim letzten (Klein-)-Projekt habe ich einfach damit gelebt, in der IDE den Pfad zu löschen, neu zu kompilieren und fertig.
(Das ich mindestens 10x vergessen habe, den Eintrag zurückzusetzen und die IDE hing: so hatte ich wenigstens Zeit, Kaffee zu holen...)

Jetzt habe ich ein paar Formulare mehr und es nervt einfach nur.

Versuch:

Code: Alles auswählen

  FormCreate:

  IBConnection.Connected := false;
  IBConnection.DatabaseName := ini.ReadString('Name','Database','abc.FDB');
  IBConnection.Connected := true;
  SQLBla.Active := true;
  SQLBlubb.Active := true;
Aber bis ins FormCreate kommt der gar nicht:
[FORMS.PP]ExceptionOccurred
Sender=EIBDatabaseError
Exception=IBConnection : DoInternalConnect :
-Unable to complete network request to host "F".
-Failed to locate host machine.
-The specified name was not found in the hosts file or Domain Name Services.

klar kann der nicht auf f:\...\...\abc.fdb zugreifen. Gibts ja nicht.

Aber: Was passiert da vor dem OnCreate?

Außerdem: ich glaube, ich habe auch hierzuforum mal einen Thread über das Problem gelesen. Aber ich finde den nicht wieder...

lg
Jochen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5890
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: TIBConnection und absoluter Pfad

Beitrag von af0815 »

Hast du die Connection auf aktive gestellt in deiner Umgebung ? Dann wir beim Erstellen der Form zuerst deine gespeicherten Einstellungen um die Ohren gehaut, bevor das OnCreate so wirklich eingreifen kann.

Ich habe eine Faustregel für mich: Nur das Hauptformular wird automatisch erstellt, alles andere im Code. Damit habe ich absolute Hoheit, wann etwas erstellt oder zerstört wird. Damit kann ich aber auch Datamodule erstellen und die Pfade an die Kundeninstallation anpassen bevor da etwas geöffnet wird. Ist zwar etwas weniger RAD, dafür aber mehr Betriebssicherheit (und Multiplatform).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Joh
Lazarusforum e. V.
Beiträge: 77
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.4 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: TIBConnection und absoluter Pfad

Beitrag von Joh »

af0815 hat geschrieben:
Di 13. Sep 2022, 18:58
Hast du die Connection auf aktive gestellt in deiner Umgebung ? Dann wir beim Erstellen der Form zuerst deine gespeicherten Einstellungen um die Ohren gehaut, bevor das OnCreate so wirklich eingreifen kann.
OK, aber dann fehlt eigentlich irgendwas in der EventOrder...
https://wiki.freepascal.org/Event_order/de hat geschrieben: Form.OnCreate
Dies entspricht dem Konstruktor der Klasse in Formularen.
Das heißt, es wird Code ausgeführt und interpretiert, bevor der Konstruktor ausgeführt wird?!
Das entspricht nicht meinem Weltbild ;-)

PS: Noch ist mir dabei Multiplattform wumpe. Aber letztlich bekomme ich meine selbstkreierte Batch auch in ein Shellscript...
Aber unter Linux werden die Probleme wohl anders gelagert sein^^

Zu meiner Lösung:
Ich finde es ja gerade praktisch, in der IDE sehen zu können, wie groß die Spalten etc. werden müssen.
Hier jetzt meine Lösung zum Erstellen der Kundenversion (Batch für Windows):

Code: Alles auswählen

REM kompilieren.bat im Projektverzeichnis

FOR %%d in (*.lfm) do f:\Tools\sed\sed.exe -i "s/'F:\\Progs\\xxx\\xxx.FDB'/'xxx.FDB'/g" %%d

f:\lazarus\lazbuild -B xxx.lpi

FOR %%d in (*.lfm) do f:\Tools\sed\sed.exe -i "s/'xxx.FDB'/'F:\\Progs\\xxx\\xxx.FDB'/g" %%d

DEL sed*
Also:
0) wahrscheinlich wichtig: Lazarus-Projekt schließen
i) mit sed alle Datenbankeinträge in allen Lazarus-Forms (*.lfm) auf Datenbank ohne Pfad zurücksetzen. (Für den Kunden)
ii) Projekt kompilieren
iii) mit sed alle Datenbankeinträge in allen Lazarus-Forms (*.lfm) auf Datenbank mit Pfad zurücksetzen. (Für die IDE)

PS:
wo das gerade eine Batch macht: eigentlich könnte ich die Compileroptionen in der lpi-Datei noch setzen.
Aber das soll ein anderes Thema sein.

wp_xyz
Beiträge: 4566
Registriert: Fr 8. Apr 2011, 09:01

Re: TIBConnection und absoluter Pfad

Beitrag von wp_xyz »

Joh hat geschrieben:
Mi 14. Sep 2022, 10:05
https://wiki.freepascal.org/Event_order/de hat geschrieben: Form.OnCreate
Dies entspricht dem Konstruktor der Klasse in Formularen.
Das heißt, es wird Code ausgeführt und interpretiert, bevor der Konstruktor ausgeführt wird?!
Das entspricht nicht meinem Weltbild ;-)
Keine Ahnung, was der Autor dieses wiki-Artikels mit "entspricht" meint, definitiv gilt auf jeden Fall: Form.OnCreate ist nicht der Konstructor - das ist die Methode Create. Dort wird die Instanz der Klasse erzeugt, Variablen werden initialisiert, es wird die lfm-Datei gelesen und erst am Ende wird in der Methode AfterConstruction das Event OnCreate erzeugt.

Das heißt aber: wenn du den Pfad zu einer Datenbank in der lfm-Datei gespeichert und dort die Verbindung zur Datenbank aktiviert hast (weil du das im Objekt-Inspektor so eingestellt hast), dann wird unweigerlich zuerst dieser Code, der sich aus der lfm-Datei ergibt, ausgeführt, bevor dein OnCreate-Handler zum Zuge kommt.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5890
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: TIBConnection und absoluter Pfad

Beitrag von af0815 »

Joh hat geschrieben:
Mi 14. Sep 2022, 10:05
PS: Noch ist mir dabei Multiplattform wumpe. Aber letztlich bekomme ich meine selbstkreierte Batch auch in ein Shellscript...
Aber unter Linux werden die Probleme wohl anders gelagert sein^^

Zu meiner Lösung:
Ich finde es ja gerade praktisch, in der IDE sehen zu können, wie groß die Spalten etc. werden müssen.
Hier jetzt meine Lösung zum Erstellen der Kundenversion (Batch für Windows):
Das mache ich für jede Plattform ein paar ma,l, da kann ich das händisch aktivieren und wieder deaktivieren. Dann brauche ich es nicht mehr. Normalerweise sind solche Einstellungen bei mir in einer Konfigurationdatei, weil es auf den verschiedenen Plattformen anders aussieht und auch die Auflösung bei den Kunden kann anders sein.

Das wumpe sein, kann ganz schön in Arbeit ausarten, wenn man dann plötzlich das ganze Layout schießen kann. Kann dir genauso auf Windows only passieren, wenn plötzlich wer einen 4K Bildschirm hat und ein anderer ein Windows Tablett mit unterbelichteter Auflösung:-) UI da kann Freude aufkommen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten