文章

今天升级到 Delphi 12 后,编译运行原来的项目,出现“[FireDAC][Phys][SQLite][sqlite3]-303.Capability is not supported”的错误。

 

经过查找文档,发现是FireDAC SQLite 版本更新导致的。

RAD Studio 12.0 支持 SQLite 3.42,同时保留了使用 FireDAC 加密(FDE)的 SQLite 3.31.1 的选项。由于 SQLite 3.42 版本放弃了 FireDAC 用于加密支持的机制,所以它不能再使用。因此,使用 FireDAC 和 SQLite 有三种不同的方式:
1、使用最新版本,不使用 FireDAC 加密。
2、使用付费的 SQLite EE(具有原生 SQLite 加密支持),FireDAC 从 RAD Studio 11.0 开始就支持了。
3、继续使用 SQLite 3.31.1 或更早版本,使用 FireDAC 加密(FDE)。

 不加密和使用付费的方式是可能的,这辈子都不可能。所以只能使用第三种方法:

只需将引用单元 “FireDAC.Phys.SQLiteWrapper.Stat” 改成 “FireDAC.Phys.SQLiteWrapper.FDEStat” 即可。

{$IF (CompilerVersion>33.0) AND (CompilerVersion<36.0)}

  FireDAC.Phys.SQLiteWrapper.Stat,

{$ELSEIF CompilerVersion >35.0 }

  FireDAC.Phys.SQLiteWrapper.FDEStat,

{$ENDIF}