加载SQLite3.dll时出现Delphi FireDAC错误

问题描述

我已经从SQLite Download Page下载了最新的sqlite.dll,并尝试使用TFDPhysDriverLink.VendorLib

加载它。

但是当我运行该应用程序时,其中包含以下代码

procedure TForm1.FormCreate(Sender: TObject);
begin
  FDConnection1.Close;
  FDPhyssqliteDriverLink1.Release;
  FDPhyssqliteDriverLink1.vendorLib:= 'Path\sqlite3.dll';
  FDQuery1.Open('SELECT *,ROW_NUMBER() OVER() Col FROM TableName');
end;

它抛出:

[FireDAC] [Phys] [sqlite]错误:“(”附近:语法错误

这意味着无法识别窗口功能ROW_NUMBER()

  • 我做错了什么?
  • 如何强制FireDAC使用最新的sqlite.dll?

解决方法

SQLite不支持ROW_NUMBER。 查看this question的答案,您可能会找到一些替代ROW_NUMBER的内容。

,

如果收到此错误,则说明SQlite3.dll的加载就很好了。

只需使用RowID字段,该字段对于任何标准SQLite3表都始终存在-除非您使用CREATE TABLE WITHOUT ROWID语句明确创建了它们。

所以我只写:

 FDQuery1.Open('SELECT *,RowID FROM TableName');

请注意,如果表中有一个明确的INTEGER PRIMARY KEY列,它将实际上映射内部RowID列。检查the SQLite3 documentation的工作原理。