In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
walsch.rene@web.de
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?

Beitrag von walsch.rene@web.de »

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.
Bei den meisten Computerfehlern sitzt die Fehlerquelle vor dem Rechner. Und sieht mir zum Verwechseln ähnlich.

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

Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?

Beitrag von wp_xyz »

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.

Benutzeravatar
gladio
Beiträge: 217
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?

Beitrag von gladio »

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.

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

Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?

Beitrag von wp_xyz »

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.

charlytango
Beiträge: 843
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?

Beitrag von charlytango »

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.
schau mal hier rein

walsch.rene@web.de
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?

Beitrag von walsch.rene@web.de »

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.
Bei den meisten Computerfehlern sitzt die Fehlerquelle vor dem Rechner. Und sieht mir zum Verwechseln ähnlich.

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

Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?

Beitrag von wp_xyz »

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 kopieren ;-) Für weitere hilfreiche Tipps wäre ich also dankbar.
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:

Code: Alles auswählen

bin\$(TargetOS)\project1
Eine 32-bit-Anwendung landet dann im Ordner bin\win32, eine 64-bit im Ordner bin\win64. Und in diese Ordner kopierst du die entsprechenden sqlite3.dlls.

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).

charlytango
Beiträge: 843
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?

Beitrag von charlytango »

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.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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?

Beitrag von af0815 »

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).

walsch.rene@web.de
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)

Beitrag von walsch.rene@web.de »

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. :lol: 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.

Ich934
Lazarusforum e. V.
Beiträge: 317
Registriert: So 5. Mai 2019, 16:52
OS, Lazarus, FPC: ArchLinux und Windows mit FPCUPdeluxe (L: 2.0.X, FPC 3.2.0)
CPU-Target: x86_64, i386
Wohnort: Bayreuth

Re: In welchem Verzeichnis muss die Library sqlite3.dll abgelegt werden?

Beitrag von Ich934 »

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.
Tipp für PostgreSQL: www.pg-forum.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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?

Beitrag von af0815 »

walsch.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.
Du hast es selbst herausgefordert :-)
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.
Ich verwende seit Jahren das Inno Script studio zum Inno Setup dazu.
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).

PascalDragon
Beiträge: 830
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?

Beitrag von PascalDragon »

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.
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.
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:
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.

Man sollte immer nach dieser Maxime agieren: „Was wenn zwei Anwendungen das machen”.
FPC Compiler Entwickler

walsch.rene@web.de
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?

Beitrag von walsch.rene@web.de »

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é
Bei den meisten Computerfehlern sitzt die Fehlerquelle vor dem Rechner. Und sieht mir zum Verwechseln ähnlich.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
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?

Beitrag von af0815 »

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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten