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;
正如上面提到的代码已经指出了库的路径
SQLConnection1.LibraryName := 'E://sqlite-dll-win32-x86-3071700/sqlite3.dll';
但我仍然得到像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;
所以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,反之亦然).
| 归档时间: | 
 | 
| 查看次数: | 8571 次 | 
| 最近记录: |