2

sqlite3.dllDelphi アプリでエラーが見つかりません。私の 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 not found のようなエラーが発生します。このエラーのトラブルシューティング方法は?

4

5 に答える 5

5

ちょっとしたメモ

Delphi XE3 以降でLibraryName は廃止されました。

古いバージョンの Delphi では、LibraryName「ドライバに関連付けられた dbExpress ライブラリ」(例: Firebird の dbxfb.dll)を示し、VendorLibは「クライアント側でのデータベースの使用をサポートするためにデータベース ベンダーが提供するライブラリ」(例: fbclient. 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 にアクセスできるようにするか、次のハックを試す必要があります。

(これは、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 用のバイナリをダウンロードし、使用しているシステム ファイル (system32 または SysWOW64) にも sqlite3.def をコピーします。Delphi XE7 のインストールで欠落しているようです。

于 2015-09-10T11:37:32.047 に答える
1

@TLama、@David Heffernan、JRL、その他多くの人が、最終的にDotconnect for SQLiteでうまくいきました。TLama で提案されているように、DBExpress Driver For SQLite はまだ試していません。dotconnect と DBExpress ドライバーの両方に同様のユーティリティがあるため、DBExpress ドライバーも問題を解決したと思います。

于 2013-08-26T20:09:33.870 に答える