我可以直接在支持
timediff
的SQLite中执行查询,但如果我使用TFDQuery
,它会说不支持该功能。 我错过了什么?
更新:选择语句示例如下
SELECT timediff('now','1809-02-12');
如果我在 HeidiSQL 中运行,我会愉快地返回
+0215-09-17 00:39:18.889
。但是如果我在 TFDQuery 中运行它(通过 TFDConnection 与 SQLite DB 通信),我会得到 [FireDAC][Phys][SQLite] ERROR: no such function: timediff.
Delphi 12.2 有一个稍微太旧的静态链接 SQLite DLL 版本。
TimeDiff
函数在 SQLite 3.43 版本中引入。这意味着您需要将 DLL 动态链接到您的应用程序。
首先下载最新版本的DLL。 然后,在您的应用程序中,删除
TFDPhysSQLiteDriverLink
。 将 DriverID
设置为某个内容(例如 SQLite347
),将 EngineLinkage
设置为 slDynamic
,将 VendorLib
设置为您之前下载的 sqlite3.dll
的完整路径。
接下来,在您的
TFDConnection
上,将 DriverName 设置为您在上面设置的 DriverID
中的名称。
uses
FireDAC.Phys.SQLiteWrapper;
procedure TMyDataModule.DataModuleCreate(Sender: TObject);
begin
FDPhysSQLiteDriverLink1.DriverID := 'SQLite347';
FDPhysSQLiteDriverLink1.EngineLinkage := slDynamic;
FDPhysSQLiteDriverLink1.VendorLib := 'Z:\Downloads\SQLite\sqlite3.dll';
FDConnection1.DriverName := 'SQLite347';
end;