问题描述
我已经从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;
它抛出:
这意味着无法识别窗口功能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的工作原理。