UPDATE中的SQLite语法错误-在SQLiteStudio中工作,而不是在我的代码中



我的问题是,我写了一个更新,在SQLiteStudio中检查了它,它运行良好。当我在程序中执行相同的程序时,它会抛出语法错误。('ear"FROM":语法错误'(

sqlite3.dll中存在差异,因为SQLiteStudio使用64位dll,我的代码是32位Windows应用程序,所以它使用32位dll。早些时候,我已经发现两个版本的功能有一些小的差异(例如,括号是否被接受(,但总有一个解决方案可以避免这个问题。(不幸的是,我不知道确切的版本号,但32位版本是由Idera股份有限公司在20中数字签名的。2021年2月,它包含在Delphi10.4社区版本中。(

但这一次我不知道问题出在哪里。

我更新的原始形式是:

UPDATE wRoutes SET tfFeedPt = fitt.tid FROM
(SELECT wr.id AS wid, tf.id AS tid FROM wRoutes wr 
JOIN xyposFitt tf 
ON wr.posX = tf.posX AND wr.posY = tf.posY
AND wr.drNum = tf.drNum AND wr.page = tf.page
WHERE endpoint = "X") AS fitt
WHERE wRoutes.id = fitt.wid

它在SQLiteStudio中是perferct,但从我的代码中抛出了提到的异常。

我在谷歌上搜索了很多,发现了一个似乎很有希望的提示-使用WITH UPDATE表单,所以我也尝试了这个版本:

WITH fitt AS
(SELECT wr.id AS wid, tf.id AS tid FROM wRoutes wr
JOIN xyposFitt tf  
ON wr.posX = tf.posX AND wr.posY = tf.posY  
AND wr.drNum = tf.drNum AND wr.page = tf.page 
WHERE endpoint = "X")
UPDATE wRoutes SET tfFeedPt = fitt.tid 
FROM fitt
WHERE wRoutes.id = fitt.wid

它在SQLiteStudio中再次工作,但在我的代码中没有。我尝试了使用和不使用";AS";。例如";FROM wRoutes wr";以及";FROM wRoutes AS wr";。结果是一样的:SQLiteStudio OK,我的代码:"near";FROM":语法错误'。

有人能告诉我,我的UPDATE命令出了什么问题吗?

提前谢谢。

Forpas的注释包含正确答案:更新。。。FROM语法需要SQLite 3.33.0+版本。将dll升级到最新版本(3.37.2(解决了问题。

相关内容

最新更新