代码之家  ›  专栏  ›  技术社区  ›  Kempeth

OLEDB+Jet:联接操作中的语法错误

  •  0
  • Kempeth  · 技术社区  · 15 年前

    我已经为我的Access数据库构建了一个复杂的查询,在Access中,它的工作方式很迷人。但当我试图通过OLEDB在程序中运行相同的查询时,我得到一个异常“join operation中的语法错误”。没有更多信息。

    SELECT
        MainTable.Main_dbID,
        D0.Kvp_Value AS ["Value"]
    FROM (MainTable
    INNER JOIN (
        SELECT Main_dbID, Kvp_Value
        FROM KVPTable
        WHERE Kvp_Code IN (1, 2, 4)
    ) AS D0
    ON D0.Main_dbID = MainTable.Main_dbID)
    WHERE Main_Time <= ? AND Main_Time >= ?;
    

    我已经把这个问题分解了,因为我觉得它仍然具有代表性。之所以使用子select而不是直接联接,是因为我需要多次联接到键值表,以便将不同的键放入不同的列中。我不能让它以其他方式工作。

    我正在与C 2.0和Visual Studio 2008合作,以防出现这种情况。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Kempeth    15 年前

    发现了问题。我输入查询的方式破坏了它…

    编辑:如您所见,我将查询分布在多行上,这样阅读起来容易一些。当我将它粘贴到源代码中时,发生了以下情况:

    "SELECT FooField" +
    "FROM BarTable;";
    

    这会导致“select foofieldfrom bartable;”—显然不是有效的语法,这很痛苦。我只是没先意识到…

        2
  •  0
  •   Fionnuala    15 年前

    这无疑是一个令人困惑的信息。错误的是多余的逗号:

    D0.Value AS ["Value"],  <-- here
    

    我希望这些名称不是真正的字段(列)名称,因为值和时间是保留字,并且会导致无穷的问题。我建议你至少用方括号把它们括起来,如果它们是真名的话。

    推荐文章