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

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Benutzeravatar
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?

Beitrag von gladio »

und müsste nicht auch das Programm wissen, wo es nach der DLL suchen soll... LibraryLocation ?

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

gladio hat geschrieben: Di 3. Jan 2023, 13:35 und müsste nicht auch das Programm wissen, wo es nach der DLL suchen soll... LibraryLocation ?
Nicht unbedingt, es wir im Systempfad für die Libs und dann im Verzeichnis der Executable automatisch gesucht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

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

Beitrag von MmVisual »

Ich nutze ebenfalls die SQLite3.dll, jedoch die 64 Bit DLL Version benenne ich immer in "SQLite3-64.dll" um, damit kann ich beide DLL's im gleichen Verzeichnis halten.

Bei der TZConnection im BeforeConnect kann ich dann diesen Code ausführen:

Code: Alles auswählen

  s := LowerCase(TZConnection(Sender).Protocol);
  if TZConnection(Sender).LibraryLocation = '' then
  begin // Nur suchen wenn leer
    {$ifdef win64}
    if Pos('sqlite', s) = 1 then
    begin
      if LoadLibTest('sqlite3-64.dll') then
      Begin
        TZConnection(Sender).LibraryLocation := 'sqlite3-64.dll';
        If ErrMessagesDebugMode >= 1 Then
          DoLog('Use LibraryLocation: ' + TZConnection(Sender).LibraryLocation);
      End;
    end
    else  
....
{$endif}
....
Das "LoadLibTest()" macht nur ein dynlibs.LoadLibrary(), damit prüfe ich relativ einfach ob die EXE diese DLL irgendwie finden kann, dann brauche ich nicht selbst danach suchen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Meridian
Beiträge: 42
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

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

Beitrag von Meridian »

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:

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.
Hallo zusammen,

den Teil, wohin ich die dll jeweils kopieren soll habe ich so gemacht. Also 32-bit Version ins c:\windows\syswow64
Verzeichnis und die 64-bit Version ins c:\windows\system32 Verezichnis.

Und trotzdem muss ich in jedes SQlite-Programm die dell hineinkopieren.

Habe ich etwas übersehen?? Danke für Tipps...

charlytango
Beiträge: 1060
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 3. Jan 2023, 11:18 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
.....
Hat jemand Erfahrungen mit der portablen Version und SQLite?
Bei der ganzen Aktion ist mir irgendwie Lazarusportable aufgefallen und ich dachte "Was zu Geier...?"
Nach einer schnellen Suche hab ich erstaunt festgestellt dass es so etwas tatsächlich zu geben scheint -- allerdings mit Versionen aus 2015 oder so.

@walsch.rene@web.de (übrigens keine so tolle Idee eine Mailaddi als Username zu nehmen)
Lazarus IST in jedem Fall eine Portable Installation weil es in einem einzigen Verzeichnis bleibt und sich nicht ins Betriebssystem hinein gräbt. Man kann sogar mehrere Lazarus-Installationen gleicher oder unetrschiedlicher Versionen gleichzeitig nebeneinander auf einem Rechner betreiben.

Ich würde daher in jedem Fall eine aktuelle stable Version von Lazarus verwenden.

alfware17
Beiträge: 210
Registriert: Di 14. Dez 2010, 23:27

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

Beitrag von alfware17 »

Meridian hat geschrieben: Do 30. Jan 2025, 22:36
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:

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.
Hallo zusammen,

den Teil, wohin ich die dll jeweils kopieren soll habe ich so gemacht. Also 32-bit Version ins c:\windows\syswow64
Verzeichnis und die 64-bit Version ins c:\windows\system32 Verezichnis.

Und trotzdem muss ich in jedes SQlite-Programm die dell hineinkopieren.

Habe ich etwas übersehen?? Danke für Tipps...
Ich bin kein Experte und möchte wp_xyz nichts unterstellen - aber für mich sieht es so aus, als wenn er (und damit du) die Pfade bzw die 32/64 Bit Versionen vertauscht hat.
Die 32bit Datei kommt doch ins 32bit-Verzeichnis und die 64bit Datei ins 64bit-Verzeichnis und nicht umgekehrt. Wenn du es umgekehrt kopierst, findet der PC natürlich nach wie vor: nichts.
Ich kenne das Problem und gebe zu, ich bin da relativ konservativ und gebe jedes Mal die dll mit wenn ich eine Anwendung verteile, die sqlite benutzt unter Windows. Die sind bei mir sogar in den Installationspaketen mit drin und werden ins Anwendungsverzeichnis kopiert. Bei der Entwicklung mit Lazarus ebenso, gleich neben die entsprechende s3db also die Datenbank, es sei denn diese liegt gewollt woanders zB in einem gemeinsamen Verzeichnis wo mehrere Programme hinfinden.

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

Windows ist bei den Systempfade aus historischen Gründen etwas komisch. Auf 64Bit Systemen im System32 die 64bit und im im Syswow64 die 32Bit dlls. Syswow64 ist für eine Emulationsschicht im 64Bit System für 32 Bit Anwendungen.
Kling komisch ist aber logischer wenn man sich mit den internas von Windows beschäftigt. Außerdem werden etliche Pfade im System im Hintergrund emuliert und vor dem Benutzer verborgen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten