Nin*_*are 2 delphi sqlite delphi-xe3
我sqlite3.dll在Delphi应用程序中找不到错误.我的电脑上已有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;
Run Code Online (Sandbox Code Playgroud)
正如上面提到的代码已经指出了库的路径
SQLConnection1.LibraryName := 'E://sqlite-dll-win32-x86-3071700/sqlite3.dll';
Run Code Online (Sandbox Code Playgroud)
但我仍然得到像sqlite3.dll找不到的错误.如何解决此错误?
从Delphi XE3开始,LibraryName 已经过时了.
在较旧的Delphi版本中,LibraryName指示"与驱动程序关联的dbExpress库"(例如,用于Firebird的dbxfb.dll),而VendorLib指示"由数据库供应商提供的库以支持客户端使用数据库"(例如fbclient). Firebird的dll/fbembed.dll,相当于Sqlite的sqlite3.dll).
在Windows上,此驱动程序使用sqlite3.dll的延迟加载.就像是:
function sqlite3_open_v2; external 'sqlite3.dll' delayed;
Run Code Online (Sandbox Code Playgroud)
所以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;
Run Code Online (Sandbox Code Playgroud)
警告:还要确保没有混合使用32位和64位模块(即32位exe和64位dll,反之亦然).
| 归档时间: |
|
| 查看次数: |
8571 次 |
| 最近记录: |