0

我的问题是,我写了一个更新,在 SQLiteStudio 中检查它,它工作正常。当我在我的程序中执行相同的操作时,它会引发语法错误。('在“FROM”附近:语法错误')

sqlite3.dll有区别,因为 SQLiteStudio 使用的是 64 位的,我的代码是 32 位的 Windows 应用程序,所以它使用的是 32 位的 dll。我在前面两个版本的功能中已经发现了一些小的差异(例如是否接受括号),但总有一个解决方案可以避免这个问题。(不幸的是我不知道任何确切的版本号,但 32 位版本由 Idera Inc. 于 2021 年 2 月 20 日进行数字签名。它包含在 Delphi 10.4 Community 版本中。)

但这一次我不知道,可能是什么问题。

我的 UPDATE 的原始形式是:

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 中非常完美,但从我的代码中抛出了提到的异常。

我在 Google 中搜索了很多,发现了一个似乎很有希望的提示 - 使用 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": syntax error'。

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

先感谢您。

4

1 回答 1

0

Forpas 的评论包含正确答案:UPDATE...FROM 语法需要 SQLite 版本 3.33.0+。将 dll 升级到最新(3.37.2)解决了这个问题。

于 2022-01-29T15:09:52.923 回答