附加第二个数据库后,我尝试使用ON CONFLICT(id(执行更新在第一个数据库的表中插入和更新数据。字段 id 是第一个表的主键。
FDQuery1.EXECSQL('ATTACH ''D:Update2019.DB'' AS DBUpdate');
FDQuery1.SQL.Text:=
'INSERT INTO acts (id,title) SELECT id,title FROM DBUpdate.acts'+
' WHERE (DBUpdate.acts.id >100)'+
' ON CONFLICT(id) DO UPDATE SET'+
' title=excluded.title;'
FDQuery1.ExecSQL;
我收到错误消息:"开"附近的错误:语法错误" 当我删除 WHERE (DBUpdate.acts.id>100 条件时 错误消息为:"DO"附近的错误:语法错误"。
同样的查询在SQLITESTUDIO中工作正常。
正如注释中正确指出的那样,应用程序使用的 SQLite 不支持此语法。您将需要使用较新版本的SQLite。为此,请按照FireDAC SQLite connection
主题的动态链接段落进行操作,否则 Delphi 使用与其一起分发的版本静态链接的 SQLite 对象构建您的 FireDAC 应用程序(这使得您的应用程序依赖于这样的 SQLite 版本,无论周围有什么 SQLite DLL(。
只是不要忘记此任务中最重要的部分;修改FireDAC.inc包含文件以使用动态链接。如果您不想破坏Delphi安装源文件夹,请将所有FireDAC模块复制到其他地方,将它们添加到项目的构建搜索路径中,然后在那里修改FireDAC.inc包含文件。