ON CONFLICT(ID) DO UPDATE SET 不适用于 DELPHI 10.3.1 中的 FireDAC



附加第二个数据库后,我尝试使用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包含文件。

相关内容

  • 没有找到相关文章