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



我在Delphi应用程序中收到sqlite3.dll未找到错误。我的电脑上已经有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这样的错误找不到。如何解决此错误?

一个小音符

从DelphiXE3开始,LibraryName已经过时。

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


Embarcadero的Sqlite dbExpress驱动程序

在Windows上,此驱动程序使用sqlite3.dll的延迟加载

function sqlite3_open_v2; external 'sqlite3.dll' delayed;

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

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

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

(注意这会干扰使用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,反之亦然)。

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

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

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

在我看来,你好像还没有执行第三步。

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

@TLama、@David Heffernan、JRL和许多其他人,它最终与用于SQLite的Dotconnect一起实现了。我还没有尝试过TLama建议的用于SQLite的DBExpress驱动程序。我认为DBExpress驱动程序也会解决这个问题,因为dotconnect和DBExpress驱动都有类似的实用程序。

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

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

相关内容

最新更新