Datenpfad anpassen.

Für Fragen von Einsteigern und Programmieranfängern...
Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Datenpfad anpassen.

Beitrag von Andy Nightingale »

Hallo Leute,

eine Verständnisfrage. Ich habe ein Projekt das liegt im Ordner A. Nach einer Weile entscheide ich mich das ich alles im Ordner B haben möchte und kopier alles dahin.
Das Problem ist wenn ich daran arbeite und kompiliere dann sucht er aber immernoch im alten Pfad. Auch wenn ich sage Compiliere alles neu.
Wie kann man das ändern?
Grüße :D

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

Re: Datenpfad anpassen.

Beitrag von af0815 »

Das hängt auch davon ab, ob du in den Projektpfaden relativ (Standard) oder absolut gearbeitet hast.
Ist die Struktur gleich, kannst du das Projekt verschieben, wenn alles relativ angegeben ist.

Im Projekt einmal prüfen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: Datenpfad anpassen.

Beitrag von wp_xyz »

Da hast du irgendwo absolute Pfade eingetragen, wahrscheinlich unter "Projekteinstellungen" > "Compilereinstellungen" > "Pfade" > "Andere Units". Auch unter "Unit-Ausgabeverzeichnis" und "Ziel-Dateiname" sollten relative Pfade stehen. Lazarus macht das automatisch, aber einige ältere Delphi-Versionen (Delphi 7 mit Sicherheit) schreiben absolute Pfade in das dort entsprechende Feld.

Falls du allgemein verwendbare Units in einem bestimmten Ordner hast und diesen unter "Pfade" > "Andere Units" eingetragen hast, solltest du dir überlegen, diese Units in ein eigenes Package aufzunehmen und dieses stattdessen unter den "Benötigten Packages" des Projekts einzutragen. Damit findet jede IDE, wo auch immer sie installiert wurde, diese allgemeinen Units, sofern du einmal das Package in dieser IDE geöffnet hast.

"Pfade" > "Andere Units" ist gedacht, im Projektverzeichnis eine Ordnerstruktur einzurichten. Angenommen, dein Projektverzeichnis enthält einen Unterordner "source" für die lpr und lpi Datei sowie alle Units. Bei einem großen Projekt kann es sinnvoll sein, alle Formulare (pas+lfm) in einen eigenen Ordner (forms) zu haben, "normale" Units in einem anderen Ordner "units", etc. Unter "Pfade" >"Andere Units" würde dann stehen "forms;units".

Bei einem Projekt, in dem alle Units zusammen mit der Projektdatei im selben Ordner liegen, ist "Pfade" > "Andere Units" leer.

Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Re: Datenpfad anpassen.

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Di 25. Aug 2026, 19:36 Da hast du irgendwo absolute Pfade eingetragen, wahrscheinlich unter "Projekteinstellungen" > "Compilereinstellungen" > "Pfade" > "Andere Units". Auch unter "Unit-Ausgabeverzeichnis" und "Ziel-Dateiname" sollten relative Pfade stehen. Lazarus macht das automatisch, aber einige ältere Delphi-Versionen (Delphi 7 mit Sicherheit) schreiben absolute Pfade in das dort entsprechende Feld.

Falls du allgemein verwendbare Units in einem bestimmten Ordner hast und diesen unter "Pfade" > "Andere Units" eingetragen hast, solltest du dir überlegen, diese Units in ein eigenes Package aufzunehmen und dieses stattdessen unter den "Benötigten Packages" des Projekts einzutragen. Damit findet jede IDE, wo auch immer sie installiert wurde, diese allgemeinen Units, sofern du einmal das Package in dieser IDE geöffnet hast.

"Pfade" > "Andere Units" ist gedacht, im Projektverzeichnis eine Ordnerstruktur einzurichten. Angenommen, dein Projektverzeichnis enthält einen Unterordner "source" für die lpr und lpi Datei sowie alle Units. Bei einem großen Projekt kann es sinnvoll sein, alle Formulare (pas+lfm) in einen eigenen Ordner (forms) zu haben, "normale" Units in einem anderen Ordner "units", etc. Unter "Pfade" >"Andere Units" würde dann stehen "forms;units".

Bei einem Projekt, in dem alle Units zusammen mit der Projektdatei im selben Ordner liegen, ist "Pfade" > "Andere Units" leer.
Hallo WP,
das verstehe ich nicht ganz.-ist das nicht relativ:
A.jpg
A.jpg (23.42 KiB) 379 mal betrachtet
...ich habe einfach in der IDE LPK`s hinzugefügt oder Komponenten. Eingetragen in den Pfaden hab ich nichts. Geht das automatisch?

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

Re: Datenpfad anpassen.

Beitrag von wp_xyz »

Ja, das sind relative Pfade und als solches richtig. Jetzt muss ich raten:

Hast du den Projekt-Ordner bei laufender IDE kopiert? Das kommt es immer wieder zu merkwürdigen "Vergesslichkeiten", weil Dateien noch in internen Caches liegen. Zum Kopieren die IDE beenden.

Als nächstes würde ich das Ausgabeverzeichnis im neuen Projektordner löschen (das ist das "Unit-Ausgabeverzeichnis") oder als Minimum "Start" > "Neu kompilieren" oder sogar "Aufräumen und kompilieren". Damit garantiert alles neu kompiliert wird.

Gibt es in deinem Code Anweisungen wie ChangeDir()? Mir ist nicht klar, ob ein Verzeichniswechsel zur Laufzeit vielleicht auch einen Verzeichniswechsel zur Entwurfszeit bewirkt, Falls du da wieder im alten Projektverzeichnis landest, merkst du das garantiert nicht so schnell weil dieselben Dateien vorhanden sind wie im neuen.

Oder hast du irrtümlicherweise das Projekt im alten Ordner geöffnet? Solche Verwechselungen nach Kopieraktionen passieren mir laufend...

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

Re: Datenpfad anpassen.

Beitrag von af0815 »

Hast du die Pakete (*.lpk) auch mit verschoben ? Und beziehen sich die Meldungen auf die Pakete. ?

Dann muss man die Pakete auch neu an der neuen Stelle registrieren. Und Sicherheitshalber die alten Pfade in der Paketverwaltung löschen. Wenn die Pakete welche sind, die auch in Lazarus in der Komponenten Palette hat, wird man um ein neu kompilieren von Lazarus auch nicht umhin kommen.
Komponenten.png
Komponenten.png (79.01 KiB) 322 mal betrachtet
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Re: Datenpfad anpassen.

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Di 25. Aug 2026, 23:42 Ja, das sind relative Pfade und als solches richtig. Jetzt muss ich raten:

Hast du den Projekt-Ordner bei laufender IDE kopiert? Das kommt es immer wieder zu merkwürdigen "Vergesslichkeiten", weil Dateien noch in internen Caches liegen. Zum Kopieren die IDE beenden.

Als nächstes würde ich das Ausgabeverzeichnis im neuen Projektordner löschen (das ist das "Unit-Ausgabeverzeichnis") oder als Minimum "Start" > "Neu kompilieren" oder sogar "Aufräumen und kompilieren". Damit garantiert alles neu kompiliert wird.

Gibt es in deinem Code Anweisungen wie ChangeDir()? Mir ist nicht klar, ob ein Verzeichniswechsel zur Laufzeit vielleicht auch einen Verzeichniswechsel zur Entwurfszeit bewirkt, Falls du da wieder im alten Projektverzeichnis landest, merkst du das garantiert nicht so schnell weil dieselben Dateien vorhanden sind wie im neuen.

Oder hast du irrtümlicherweise das Projekt im alten Ordner geöffnet? Solche Verwechselungen nach Kopieraktionen passieren mir laufend...
Hallo WP,
nein habe ich alles nicht gemacht. Ich probiere mal deine Tipps aus.-Danke dir und Grüße

Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Re: Datenpfad anpassen.

Beitrag von Andy Nightingale »

af0815 hat geschrieben: Mi 26. Aug 2026, 06:46 Hast du die Pakete (*.lpk) auch mit verschoben ? Und beziehen sich die Meldungen auf die Pakete. ?

Dann muss man die Pakete auch neu an der neuen Stelle registrieren. Und Sicherheitshalber die alten Pfade in der Paketverwaltung löschen. Wenn die Pakete welche sind, die auch in Lazarus in der Komponenten Palette hat, wird man um ein neu kompilieren von Lazarus auch nicht umhin kommen.

Komponenten.png
Hallo af0815,
danke für den Tipp.-ja ich habe immer alles mitkopiert. Ich sehe mir mal die Pfade an.

Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Re: Datenpfad anpassen.

Beitrag von Andy Nightingale »

wp_xyz hat geschrieben: Di 25. Aug 2026, 19:36 Da hast du irgendwo absolute Pfade eingetragen, wahrscheinlich unter "Projekteinstellungen" > "Compilereinstellungen" > "Pfade" > "Andere Units". Auch unter "Unit-Ausgabeverzeichnis" und "Ziel-Dateiname" sollten relative Pfade stehen. Lazarus macht das automatisch, aber einige ältere Delphi-Versionen (Delphi 7 mit Sicherheit) schreiben absolute Pfade in das dort entsprechende Feld.
Hallo WP,
ich habe nun den Namen wieder wie vorher geschrieben und nun geht es wieder. Dann habe ich gedacht. Ok. Mein Programm ist ja eine Client / Server Entwicklung.-wo der Client auf eine Firebird Datei die Daten abruft. Damit ich das fbclient.dll nicht auf einem anderen Client ständig für den Kunden installieren muß. Da dachte ich ok dann mach es so das die Dll von einem internen Ordner geladen und gesucht wird...also unabhängig...Hab dann in meinem Ordner wo mein Programm liegt ein Unterodner gemacht und das auch programmatisch gemacht das er die DLL findet. Nun habe ich zusammen mit meinem Programm alles auf einen Stick gemacht und wollte den Client von einem anderen Rechner starten....nun kommt wieder der Gleiche Fehler...er sucht wieder in einem Pfad:
B.jpg
B.jpg (20.84 KiB) 270 mal betrachtet
....
Mein Code in der Form.creat heißt:

Code: Alles auswählen

        FBClient := IncludeTrailingPathDelimiter(
  ExtractFilePath(Application.ExeName)
) + 'fb564win' + DirectorySeparator + 'fbclient.dll';    
....der Code funktioniert nur auf meinem Rechner mit dem alten Pfad...da sucht er auch in dem Ordner...aber sobald wenn ich das komplette Programm auf einem anderen Pfad oder auf einem anderen Rechner starte kommt dieser Fehler....zum verzweifeln

Benutzeravatar
Zvoni
Beiträge: 722
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Datenpfad anpassen.

Beitrag von Zvoni »

"C:\Users\Webma\Desktop\......."

Ernsthaft?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Re: Datenpfad anpassen.

Beitrag von Andy Nightingale »

Zvoni hat geschrieben: Mi 26. Aug 2026, 14:45 "C:\Users\Webma\Desktop\......."

Ernsthaft?
Hallo Zvoni,
ja wieso? Das mache ich schon seit 20 Jahren so. Alle meine wichtigen Programme hab ich auf dem Desktop Ordner. Auch von meinem alten Programmiertool. Hatte nie Probleme. Was ist denn das Problem mit Lazarus dabei?.-und wie ändere ich den Pfad? Grüße

Benutzeravatar
Zvoni
Beiträge: 722
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Datenpfad anpassen.

Beitrag von Zvoni »

Andy Nightingale hat geschrieben: Mi 26. Aug 2026, 15:01
Zvoni hat geschrieben: Mi 26. Aug 2026, 14:45 "C:\Users\Webma\Desktop\......."

Ernsthaft?
Hallo Zvoni,
ja wieso? Das mache ich schon seit 20 Jahren so. Alle meine wichtigen Programme hab ich auf dem Desktop Ordner. Auch von meinem alten Programmiertool. Hatte nie Probleme. Was ist denn das Problem mit Lazarus dabei?.-und wie ändere ich den Pfad? Grüße
Weil seit Einführung von OneDrive die Windows-übliche Pfad-Schreibweise mit Backslash ausgehebelt wird.
Und der Desktop eben mit in der üblichen Konfiguration von OneDrive ist

Falls OneDrive bei dir kein Thema/nicht im Einsatz ist, würde ich mal alle einzelnen Pfadabschnitte debuggen/ausgeben lassen.

Also "ExtractFilePath(Application.ExeName)" ausgeben lassen
DirectorySeparator ausgeben lassen (was bin ich mit dem auf die Schnauze gefallen).
Und sich von einem Verzeichnis zum nächsten hangeln.

Und eben in einem Explorer-Fenster nebendran mit verfolgen wo es knallt

Du kannst auch DirectoryExists und FileExists mit in die Debug-Routinen nehmen.
Ich glaube SysUtils muss dafür in Uses
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Re: Datenpfad anpassen.

Beitrag von Andy Nightingale »

Zvoni hat geschrieben: Mi 26. Aug 2026, 15:30
Andy Nightingale hat geschrieben: Mi 26. Aug 2026, 15:01
Zvoni hat geschrieben: Mi 26. Aug 2026, 14:45 "C:\Users\Webma\Desktop\......."

Ernsthaft?
Hallo Zvoni,
ja wieso? Das mache ich schon seit 20 Jahren so. Alle meine wichtigen Programme hab ich auf dem Desktop Ordner. Auch von meinem alten Programmiertool. Hatte nie Probleme. Was ist denn das Problem mit Lazarus dabei?.-und wie ändere ich den Pfad? Grüße
Weil seit Einführung von OneDrive die Windows-übliche Pfad-Schreibweise mit Backslash ausgehebelt wird.
Und der Desktop eben mit in der üblichen Konfiguration von OneDrive ist

Falls OneDrive bei dir kein Thema/nicht im Einsatz ist, würde ich mal alle einzelnen Pfadabschnitte debuggen/ausgeben lassen.

Also "ExtractFilePath(Application.ExeName)" ausgeben lassen
DirectorySeparator ausgeben lassen (was bin ich mit dem auf die Schnauze gefallen).
Und sich von einem Verzeichnis zum nächsten hangeln.

Und eben in einem Explorer-Fenster nebendran mit verfolgen wo es knallt

Du kannst auch DirectoryExists und FileExists mit in die Debug-Routinen nehmen.
Ich glaube SysUtils muss dafür in Uses
Hallo Zvoni....nein hab kein OneDrive.....wahrscheinlich verstehe ich wieder etwas falsch. wenn ich ExtractFilePath mache dann zeigt es mir ja den richtigen aktuellen Pfad an.
Wie mache ich es das mein Programm auf einem anderen Laptop sagen wir sogar auf einem USB Stick läuft? Da ich ja möchte das man von überall aus mit meinem Programm auf den OnlineServer und damit auch auf die Datenbank zugreifen kann. Mein Programm funktioniert...also wenn ich die Exe anklicke dann läuft es super....aber wenn ich nur das Programmverzeichnis ändere kommt der Fehler oben. Gibt es irgendeine Häckchen oder Einstellung wo ich sagen kann:....erstelle mir eine Portable Version? Grüße

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

Re: Datenpfad anpassen.

Beitrag von af0815 »

Es gibt gewisse Vorgaben von Windows an Programme und Bibliotheken. Diese Vorgaben werden von MS bei Windows immer mehr durchgesetzt. Auch bei den 'Administrations' Usern.
Ein Prgramm das einfach kopiert wird und auf irgendwelche Bibliotheken zugreift ist grundlegend einmal verdächtig. Ich kann es auch nochvollziehen. Command & Controlserver greifen auch auf Datenbanken, Server etc. zu und versuchen dem Benutzer schaden zuzufügen. Das einmal als Basis.

Programme unter Windows sollte man über Installer weitergeben. Damit kann man auch dem System gleich mitteilen, welche Bibliotheken man verwenden will und man kann diese auch im System installieren. Damit vermeidet man, das Windows dich auf eine vorhandene Datei nicht zugreifen lassen will.
Ein von mir verwendetes Tool ist das Inno Setup.

ZU deinem Problem mit den Pfaden. Der Suchbereich gerade der Datenbanktreiber, wo ihre Bibliotheken liegen, ist sehr begrenzt. Deswegen haben SQLdb und ZEOS Möglichkeiten anzugeben wo sich die Treiberlibs befinden. Das muss aber vor dem ersten Verwenden abspielen. Und dort muss man meiner Erfahrung nach, die vollen Pfade angeben. Die einfachste Variante, war immer, die im selben Verszeichnis wie die Exe zu haben. Falls das nicht der Fall war, durfte ich den Pfad komplett extenden (ein .\driver\treiber.dll hat nicht gereicht). Ach ja, Pfade im Explorer müssen nicht immer die wirklichen Pfade im Dateisystem sein. Windows lügt und betrügt bei den Pfaden, wie es das gerade braucht.

BTW. USB-Sticks sind von Haus aus eine Quelle von Angriffen, deswegen wurden schon USB-Sticks in vielen großen Firmen von den Admins her deaktiviert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Andy Nightingale
Beiträge: 427
Registriert: Mo 13. Jan 2025, 12:11

Re: Datenpfad anpassen.

Beitrag von Andy Nightingale »

af0815 hat geschrieben: Mi 26. Aug 2026, 19:18

BTW. USB-Sticks sind von Haus aus eine Quelle von Angriffen, deswegen wurden schon USB-Sticks in vielen großen Firmen von den Admins her deaktiviert.
Hallo AF0815 und alle Anderen,

der Kunde möchte eben das mit Stick haben. Habe es nun gelöst indem ich alle Pfade absuchen lasse. Dankeschön an Euch :-)

Code: Alles auswählen

procedure TTFormLogin.FormCreate(Sender: TObject);
var
  AppPath, FBClientPath: string;
begin
  
  AppPath := ExtractFilePath(Application.ExeName);

    FBClientPath := AppPath + 'fbclient.dll';
  if not FileExists(FBClientPath) then
 
  FBClientPath := AppPath + 'fb564win' + PathDelim + 'fbclient.dll';

   if FileExists(FBClientPath) then
    ZConnection1.LibraryLocation := FBClientPath
  else
    ShowMessage('Fehler: fbclient.dll nicht gefunden!' + #13#10 +
                'Gesuchter Pfad: ' + FBClientPath);

    if not ZConnection1.Connected then
    ZConnection1.Connect;
  ZConnection1.Connected := True;

  ShowMessage('Du bist nun Verbunden, Name und Passwort eingeben');
  LoadNamenInComboBox;
end;                            

Antworten