使用Delphi获取sqlite3.dll未找到错误

时间:2013-08-26 11:12:48

标签: delphi sqlite delphi-xe3

我在Delphi应用程序中发现sqlite3.dll未找到错误。我的电脑上已经有E://sqlite-dll-win32-x86-3071700

的sqlite3.dll文件

我的来源如下

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找不到的错误。如何解决此错误?

5 个答案:

答案 0 :(得分:5)

小记

从Delphi XE3开始,LibraryName is obsolete

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


Embarcadero的Sqlite dbExpress驱动程序

在Windows上,此驱动程序使用delayed loading 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,反之亦然)。

答案 1 :(得分:1)

根据this Embarcadero blog article,您需要采取的步骤是:

  1. http://www.sqlite.org/download.html下载SQLite客户端。
  2. 确保您的应用程序可以找到sqlite3.dll。
  3. 添加TSQLConnection个实例,并将Driver属性设置为Sqlite
  4. 在我看来,好像你没有执行第3步。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我在使用 Delphi XE7 时遇到了同样的问题。结果我下载了 64 位 DLL,但应用程序是 32 位的。我将 32 位 DLL 复制到应用程序文件夹,然后就可以连接了。上面有人 (JRL) 说了这个...

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