In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
-
- Beiträge: 14
- Registriert: Sa 9. Apr 2022, 09:35
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Köln
In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Guten Tag. Ich möchte SQLite nutzen und scheitere schon beim Aktivieren der SQLite3Connection. Wenn ich .Connected auf True setzen möchte, erhalte ich die Fehlermeldung, dass die Bibliothek sqlite3.dll nicht gefunden werden kann. Das FPC Wiki SQLite sagt
"All drivers do need the SQLite library/dll in the executable directory (which can be your project directory or e.g. (projectdir)/lib/architecture/ depending on your Lazarus project settings) (and distributed with your executable) in order to work."
Ich habe sqlite3.dll in das Verzeichnis kopiert, in dem die Projektdatei .lpi (und, wenn ich kompilieren könnte, auch die .exe) liegt, was offensichtlich nicht zur Lösung führt. Dies ist das erste Mal, dass ich eine Library einbinden muss, "depending on your Lazarus project settings" scheint also die Lösung zu sein, doch habe ich nicht die geringste Ahnung von diesen Settings. Ich bitte um Rat, welches das Verzeichnis ist, in welchem die sqlite3.dll liegen muss, bzw. wie ich die Projekteinstellungen so ändere, dass alles funktioniert, wenn die Bibliothek im Projektverzeichnis liegt (denn ich habe vor, das Programm weiterzugeben).
Vielen Dank!
PS. Ich ahne, dass dies nicht wirklich ein Datenbank-Thema ist, sondern eher so etwas Grundlegendes wie "Einbinden von DLLs", bin aber bei der Suche im Forum auch damit gescheitert. Seufz.
"All drivers do need the SQLite library/dll in the executable directory (which can be your project directory or e.g. (projectdir)/lib/architecture/ depending on your Lazarus project settings) (and distributed with your executable) in order to work."
Ich habe sqlite3.dll in das Verzeichnis kopiert, in dem die Projektdatei .lpi (und, wenn ich kompilieren könnte, auch die .exe) liegt, was offensichtlich nicht zur Lösung führt. Dies ist das erste Mal, dass ich eine Library einbinden muss, "depending on your Lazarus project settings" scheint also die Lösung zu sein, doch habe ich nicht die geringste Ahnung von diesen Settings. Ich bitte um Rat, welches das Verzeichnis ist, in welchem die sqlite3.dll liegen muss, bzw. wie ich die Projekteinstellungen so ändere, dass alles funktioniert, wenn die Bibliothek im Projektverzeichnis liegt (denn ich habe vor, das Programm weiterzugeben).
Vielen Dank!
PS. Ich ahne, dass dies nicht wirklich ein Datenbank-Thema ist, sondern eher so etwas Grundlegendes wie "Einbinden von DLLs", bin aber bei der Suche im Forum auch damit gescheitert. Seufz.
Bei den meisten Computerfehlern sitzt die Fehlerquelle vor dem Rechner. Und sieht mir zum Verwechseln ähnlich.
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Nachdem du von der sqlite3.dll redest, nehme ich an, dass du auf Windows bist. Da diese dll immer wieder benötigt wird, solltest du das Problem einefürallemal lösen, indem du die dll gleich ins richtige System-Verzeichnis kopierst, statt ins Anwendungsverzeichnis:
Gehe auf https://www.sqlite.org/download.html und lade dir die "Precompiled Binaries for Windows" herunter, und zwar die Version für 32-bit und die für 64-bit. Jedes Archiv enthält zwei Dateien, sqlite3.dll und sqlite3.def. Meines Wissens brauchst du die .def-Datei nicht. Entpacke das 64-bit-Archiv und kopiere die sqlite3.dll ins Verzeichnis c:\windows\system32. Du wirst bombardiert mit Warnungen, was schlimmes du nun tust - alles bestätigen und erlauben. Anschließend entpackst du das 32-bit Archiv und kopierst die dll nach c:\windows\syswow64. Nun kann jedes Programm, das die sqlite3.dll benötigt, die richtige finden, egal ob 64-bit oder 32-bit.
Achtung: Dass die 64-bit dll in ein Verzeichnis muss, dessen Name mit 32 endet, und die 32-bit dll in Verzeichnis, dessen Name mit 64 endet, ist KEIN SCHREIBFEHLER.
EDIT
Falls der ungewöhnliche Fall vorliegt, dass dein Windows nur 32-bit ist, musst du das 32-bit-Archiv laden und die dll ins Verzeichnis c:\Windows\System32 kopieren, das SysWOW64 gibt es hier nicht.
Gehe auf https://www.sqlite.org/download.html und lade dir die "Precompiled Binaries for Windows" herunter, und zwar die Version für 32-bit und die für 64-bit. Jedes Archiv enthält zwei Dateien, sqlite3.dll und sqlite3.def. Meines Wissens brauchst du die .def-Datei nicht. Entpacke das 64-bit-Archiv und kopiere die sqlite3.dll ins Verzeichnis c:\windows\system32. Du wirst bombardiert mit Warnungen, was schlimmes du nun tust - alles bestätigen und erlauben. Anschließend entpackst du das 32-bit Archiv und kopierst die dll nach c:\windows\syswow64. Nun kann jedes Programm, das die sqlite3.dll benötigt, die richtige finden, egal ob 64-bit oder 32-bit.
Achtung: Dass die 64-bit dll in ein Verzeichnis muss, dessen Name mit 32 endet, und die 32-bit dll in Verzeichnis, dessen Name mit 64 endet, ist KEIN SCHREIBFEHLER.
EDIT
Falls der ungewöhnliche Fall vorliegt, dass dein Windows nur 32-bit ist, musst du das 32-bit-Archiv laden und die dll ins Verzeichnis c:\Windows\System32 kopieren, das SysWOW64 gibt es hier nicht.
- gladio
- Beiträge: 223
- Registriert: Sa 21. Jun 2014, 06:15
- OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
- CPU-Target: 64Bit
- Wohnort: Rügen
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Es ist aber auch möglich, und eventuelle von Vorteil, die DLL ins Anwendungsverzeichnis oder ein Unterverzeichnis zu legen und die so dem Anwender an einem deffinierten Ort mitzugeben.
Du kannst nicht davon ausgehen, dass die DLL auf einem Zielcomputer in den Windows-Verzeichnissen vorhanden sind und das auch noch in der erforderlichen Version.
Du kannst nicht davon ausgehen, dass die DLL auf einem Zielcomputer in den Windows-Verzeichnissen vorhanden sind und das auch noch in der erforderlichen Version.
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Natürlich. Aber darum ging es mir gar nicht. Mich nervt es einfach, dass ich, wenn ich irgendein sqlite3-Programm ausprobiere, permanent die dlls herumkopieren muss. Und wenn ich von der 64-bit auf die 32-bit-IDE wechsle, ist dann die falsche dll im Programmverzeichnis.
-
- Beiträge: 1058
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
schau mal hier reinwalsch.rene@web.de hat geschrieben: Di 27. Dez 2022, 18:12 Guten Tag. Ich möchte SQLite nutzen und scheitere schon beim Aktivieren der SQLite3Connection.
-
- Beiträge: 14
- Registriert: Sa 9. Apr 2022, 09:35
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Köln
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Herzlichen Dank für die schnellen Antworten. Insbesondere an wp_xyz, deren/dessen präzise Anleitung das Problem für mich als Programmierer gelöst hat.
Allerdings teile ich die Einwände von gladio. Ich möchte eine kleine Datenbankanwendung schreiben und diese an Userweitergeben, die auf ihren Windows-Firmencomputern keine admin rights haben. Denen wird kaum erlaubt werden, DLLs ins Gedärm von Windows zu kopieren
Für weitere hilfreiche Tipps wäre ich also dankbar.
Allerdings teile ich die Einwände von gladio. Ich möchte eine kleine Datenbankanwendung schreiben und diese an Userweitergeben, die auf ihren Windows-Firmencomputern keine admin rights haben. Denen wird kaum erlaubt werden, DLLs ins Gedärm von Windows zu kopieren

Bei den meisten Computerfehlern sitzt die Fehlerquelle vor dem Rechner. Und sieht mir zum Verwechseln ähnlich.
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Für diesen Fall kannst du die DLL ins EXE-Verzeichnis der Anwendung kopieren. Aber Achtung: eine 64-bit-Anwendung braucht die 64-bit DLL, eine 32-bit-Anwendung die 32-bit-DLL - die beiden sqlite3.dll sind vom Namen her nicht zu unterscheiden. Falls du beide Arten von Anwendungen erstellen wirst, musst du in der Konfiguration des Projekts den Zieldateinamen ergänzen:walsch.rene@web.de hat geschrieben: Di 27. Dez 2022, 22:39 Herzlichen Dank für die schnellen Antworten. Insbesondere an wp_xyz, deren/dessen präzise Anleitung das Problem für mich als Programmierer gelöst hat.
Allerdings teile ich die Einwände von gladio. Ich möchte eine kleine Datenbankanwendung schreiben und diese an Userweitergeben, die auf ihren Windows-Firmencomputern keine admin rights haben. Denen wird kaum erlaubt werden, DLLs ins Gedärm von Windows zu kopierenFür weitere hilfreiche Tipps wäre ich also dankbar.
Code: Alles auswählen
bin\$(TargetOS)\project1
Eine weitere Komplikation ergibt sich, wenn du zur Designzeit, also im Objektinspektor, SQLite3Connection.connected auf true setzen willst. Da ist das aktive Verzeichnis das Lazarus-Verzeichnis! Also muss die DLL, entsprechend als 32-bit oder 64-bit Version, sich auch im Lazarus-Verzeichnis befinden (oder du kopierst sie, wie oben schon beschrieben, gleich ins Windows-Verzeichnis).
-
- Beiträge: 1058
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Die Tips von wp_xyz habe ich in dem genannten Datenbank-Zugriffsmodul umgesetzt und entsprechend mit Suchfunktionen und Meldungen für den Benutzer erweitert. Auch 32/64 bit Problematik wurde adressiert.
Du kannst das obige Projekt gerne benutzen und somit auch zu dessen Verbesserung beitragen.
Mein Individueller Programmierstil hat sich über die Jahre geändert. Live-Daten in der GUI benutze ich schon lange nicht mehr, aber das ist Geschmackssache.
Du kannst das obige Projekt gerne benutzen und somit auch zu dessen Verbesserung beitragen.
Mein Individueller Programmierstil hat sich über die Jahre geändert. Live-Daten in der GUI benutze ich schon lange nicht mehr, aber das ist Geschmackssache.
- af0815
- Lazarusforum e. V.
- Beiträge: 6762
- 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: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Als Programmierer sollte man sich mit Installer beschäftigen, dann kann die App sauber ausgerollt werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 14
- Registriert: Sa 9. Apr 2022, 09:35
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Köln
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden? (GELÖST)
Ganz herzlichen Dank für die fundierten Ergänzungen! Programmierer ist ein hochfliegendes Wort für einen Dilettanten wie mich, der zwar seit 30 Jahren rumfummelt, aber nie wirklich unter die Motorhaube gegangen ist. Und solche Typen lieben es, Datenbanken im Designmodus zu programmieren.
Welche Fehler das mit sich bringen kann, ist mir bewusst (falsche Reihenfolge des Öffnens und Schließens der DB sowie des Aktivierens der Komponenten). Werde also sukzessive zur Aktivierung zur Laufzeit übergehen und mich auch mit dem Installer befassen. Nochmals allen Helfern mein Dank!

Bei den meisten Computerfehlern sitzt die Fehlerquelle vor dem Rechner. Und sieht mir zum Verwechseln ähnlich.
-
- Lazarusforum e. V.
- Beiträge: 366
- Registriert: So 5. Mai 2019, 16:52
- OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 3.6, FPC 3.2.2)
- CPU-Target: x86_64, i386
- Wohnort: Bayreuth
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Ich liefere die SQLite-DLLs immer mit im Verzeichnis der .exe-Datei mit. Entsprechend liegen diese auch im Verzeichnis der jeweiligen 32-Bit oder 64-Bit-Version. Das Ganze hat einen einfachen Hintergrund: Somit kann ich steuern, welche Version mein Programm verwendet und fange mir nicht unter Umständen Probleme ein, weil der Benutzer eine ältere oder neuere Version auf seinen Rechner hat.
Ältere Versionen können u.U. bestimmte Funktionen nicht, die ich voraussetze. Neuere Versionen haben vielleicht ein anderes Verhalten, als ich erwarte. Beides ist schlecht und nicht gerade optimal. Auch wenn ich natürlich ohne Probleme meine DLLs installieren kann, so kann ich damit auch andere Programme zerstören und das will ich nicht. Also baue ich mir hier eine eigene Umgebung und gut ist es.
Ältere Versionen können u.U. bestimmte Funktionen nicht, die ich voraussetze. Neuere Versionen haben vielleicht ein anderes Verhalten, als ich erwarte. Beides ist schlecht und nicht gerade optimal. Auch wenn ich natürlich ohne Probleme meine DLLs installieren kann, so kann ich damit auch andere Programme zerstören und das will ich nicht. Also baue ich mir hier eine eigene Umgebung und gut ist es.
Tipp für PostgreSQL: www.pg-forum.de
- af0815
- Lazarusforum e. V.
- Beiträge: 6762
- 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: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Du hast es selbst herausgefordertwalsch.rene@web.de hat geschrieben:Ganz herzlichen Dank für die fundierten Ergänzungen! Programmierer ist ein hochfliegendes Wort für einen Dilettanten wie mich, der zwar seit 30 Jahren rumfummelt, aber nie wirklich unter die Motorhaube gegangen ist.

Ich verwende seit Jahren das Inno Script studio zum Inno Setup dazu.walsch.rene@web.de hat geschrieben: Di 27. Dez 2022, 22:39 Herzlichen Dank für die schnellen Antworten. Insbesondere an wp_xyz, deren/dessen präzise Anleitung das Problem für mich als Programmierer gelöst hat.
https://www.kymoto.org/products/inno-sc ... /downloads
https://jrsoftware.org/isdl.php
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 945
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Wenn du das Active der Connection im Form Designer der IDE auf True setzt, dann muss die Bibliothek auch im Verzeichnis der Executable der IDE sein, also dort wo die lazarus.exe ist. Das Verzeichnis der Anwendung greift nur für die Anwendung selbst.walsch.rene@web.de hat geschrieben: Di 27. Dez 2022, 18:12 Guten Tag. Ich möchte SQLite nutzen und scheitere schon beim Aktivieren der SQLite3Connection. Wenn ich .Connected auf True setzen möchte, erhalte ich die Fehlermeldung, dass die Bibliothek sqlite3.dll nicht gefunden werden kann.
Das ist nicht zu empfehlen, da im System Verzeichnis nur eine einzige Version der SQLite Bibliothek existieren kann. Wenn du die Bibliothek für deine Anwendung dort reinkopierst und eine andere Anwendung ihre Version da rein kopiert (zum Beispiel als Teil des Installers) dann kann dies dazu führen, dass deine Anwendung nicht mehr funktioniert (zum Beispiel weil die neu reinkopierte Version älter ist und bestimmte Exports noch nicht hat). Bibliotheken, welche eine Anwendung benötigt und die nicht eh vom Betriebssystem mitgeliefert werden, sollten Teil des Anwendungsverzeichnisses sein.wp_xyz hat geschrieben: Di 27. Dez 2022, 18:38 Nachdem du von der sqlite3.dll redest, nehme ich an, dass du auf Windows bist. Da diese dll immer wieder benötigt wird, solltest du das Problem einefürallemal lösen, indem du die dll gleich ins richtige System-Verzeichnis kopierst, statt ins Anwendungsverzeichnis:
Man sollte immer nach dieser Maxime agieren: „Was wenn zwei Anwendungen das machen”.
FPC Compiler Entwickler
-
- Beiträge: 14
- Registriert: Sa 9. Apr 2022, 09:35
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: 64Bit
- Wohnort: Köln
Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Auf meinem privaten Windows-PC habe ich die Admin-Rechte und kann nach Befolgung Eurer Anleitungen mit SQLite arbeiten. Vielen Dank für die wertvollen Tipps und Erläuterungen.
Auf meinem Windows-Dienst-PC habe ich keine Admin-Rechte. Ich arbeite dort mit LazarusPortable und habe die DLL sowohl in das Verzeichnis kopiert, in dem die Datei lazarusportable.exe liegt, als auch in mein Projektverzeichnis mit der von mir erzeugten *.exe. Dennoch kann der Compiler die DLL nicht finden. Ich habe ein 64bit-System und auch die korrekte DDL-Version. Hat jemand Erfahrungen mit der portablen Version und SQLite?
Beste Grüße,
René
Auf meinem Windows-Dienst-PC habe ich keine Admin-Rechte. Ich arbeite dort mit LazarusPortable und habe die DLL sowohl in das Verzeichnis kopiert, in dem die Datei lazarusportable.exe liegt, als auch in mein Projektverzeichnis mit der von mir erzeugten *.exe. Dennoch kann der Compiler die DLL nicht finden. Ich habe ein 64bit-System und auch die korrekte DDL-Version. Hat jemand Erfahrungen mit der portablen Version und SQLite?
Beste Grüße,
René
Bei den meisten Computerfehlern sitzt die Fehlerquelle vor dem Rechner. Und sieht mir zum Verwechseln ähnlich.
- af0815
- Lazarusforum e. V.
- Beiträge: 6762
- 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: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?
Die Frage ist, ist Lazarusportable wirklich Lazarus oder nur ein Starter für die wirkliche Lazarus Executable. Des weiteren ist die Frage welche Bitness hat dein Lazarus wirklich. Weil zur Designzeit wird die dll aus dem Lazarusverzeichnis genommen, Für die Laufzeit die aus dem exe Verzeichnis. Und die müssen nicht unbedingt zusammenpassen.
Die Lazarusversion findet man über das Menü Help-> About Lazarus (Über Lazarus). Dort kann man mit der rechten Maustaste die Infos kopieren
Beispiel:
Lazarus 2.0.11 r63532 FPC 3.2.1 i386-win32-win32/win64
Das ist ein älterer Lazarus (2.0.11) der 32Bit ist, aber für 64Bit den Crosscompiler hat. Da bräuchte ich eine 32 Bit dll für Lazarus.
Die Lazarusversion findet man über das Menü Help-> About Lazarus (Über Lazarus). Dort kann man mit der rechten Maustaste die Infos kopieren
Beispiel:
Lazarus 2.0.11 r63532 FPC 3.2.1 i386-win32-win32/win64
Das ist ein älterer Lazarus (2.0.11) der 32Bit ist, aber für 64Bit den Crosscompiler hat. Da bräuchte ich eine 32 Bit dll für Lazarus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).