2

sqlite3.dll在 Delphi 应用程序中找不到错误。我的 PC 上已经有 sqlite3.dll 文件,位于E://sqlite-dll-win32-x86-3071700

我的来源如下

procedure TForm2.Button1Click(Sender: TObject);
var
    Results: TDataSet;
begin
    SQLConnection1.Params.Add('Database=E://empn.s3db');
    SQLConnection1.LibraryName := 'E://sqlite-dll-win32-x86-3071700/sqlite3.dll';
    try
        SQLConnection1.Connected := true;
        SQLMonitor1.Active := True;

        SQLConnection1.Execute('Selct * from usergroup', nil, Results)

    finally

    end;
end;

正如上面提到的代码已经指出了库的路径

SQLConnection1.LibraryName := 'E://sqlite-dll-win32-x86-3071700/sqlite3.dll';

但我仍然收到类似 sqlite3.dll 的错误未找到。如何解决此错误?

4

5 回答 5

5

一个小笔记

从 Delphi XE3 开始,LibraryName 已经过时

在较旧的 Delphi 版本中,LibraryName表示“与驱动程序关联的 dbExpress 库”(例如,用于 Firebird 的 dbxfb.dll),而VendorLib表示“由数据库供应商提供的支持数据库客户端使用的库”(例如 fbclient.dll)。 Firebird 的 dll/fbembed.dll,相当于 Sqlite 的 sqlite3.dll)。


Embarcadero 的 Sqlite dbExpress 驱动程序

在您使用 Windows 时,此驱动程序使用sqlite3.dll 的延迟加载。就像是:

function sqlite3_open_v2; external 'sqlite3.dll' delayed;

因此 dll 使用LoadLibrary加载,并且适用于查找模块的标准搜索策略(首先是进程目录,然后是通常的路径列表)。

但是,可以使用SetDllDirectory更改此状态。

所以你必须让 sqlite3.dll 可以通过你的路径访问,或者尝试以下 hack:

(请注意,这会干扰使用 SetDllDirectory 的其他代码;请参阅 David Heffernan 的评论)

SetDllDirectory('E:\sqlite-dll-win32-x86-3071700');
try
  SQLConnection1.Open;
finally
  SetDllDirectory(''); // restore default search order
end;

警告:还要确保您没有混合使用 32 位和 64 位模块(即 32 位 exe 和 64 位 dll,反之亦然)。

于 2013-08-26T12:25:46.817 回答
2

Delphi XE7 中出现同样的错误,请从https://www.sqlite.org/download.html下载Windows 的二进制文件,并将 de sqlite3.def 复制到您正在使用的系统文件(system32 或 SysWOW64)中。Delphi XE7的安装似乎缺少它。

于 2015-09-10T11:37:32.047 回答
1

根据这篇 Embarcadero 博客文章,您需要采取的步骤是:

  1. 从http://www.sqlite.org/download.html下载 SQLite 客户端。
  2. 确保您的应用程序可以找到 sqlite3.dll。
  3. 添加一个TSQLConnection实例并将Driver属性设置为Sqlite.

在我看来,您好像没有执行第 3 步。

关于第 2 步,实现此目的的首选方法是将 DLL 与可执行文件放在同一目录中。

于 2013-08-26T13:21:16.123 回答
1

@TLama、@David Heffernan、JRL 和许多其他人,最终使用 Dotconnect for SQLite 解决了问题。我还没有按照 TLama 的建议尝试 DBExpress Driver For SQLite。我认为 DBExpress 驱动程序也可以解决问题,因为 dotconnect 和 DBExpress 驱动程序都有类似的实用程序。

于 2013-08-26T20:09:33.870 回答
1

我对 Delphi XE7 也有同样的问题。原来我已经下载了 64 位 DLL,但应用程序是 32 位的。我将 32 位 DLL 复制到应用程序文件夹,然后我就可以连接了。有人(JRL)在上面说...

警告:还要确保您没有混合使用 32 位和 64 位模块(即 32 位 exe 和 64 位 dll,反之亦然)。

于 2021-02-27T01:22:21.923 回答