我的问题是,我写了一个更新,在 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 命令有什么问题吗?
先感谢您。