【问题标题】:strSQL formatting in AccessAccess 中的 strSQL 格式设置
【发布时间】:2016-10-21 20:48:53
【问题描述】:

我在 Access 中格式化 SQL 字符串时遇到了一些问题,我似乎永远无法用 SQL 字符串调试这些语法问题。我有这个字符串:

strSQL = "SELECT * FROM FXData WHERE ShortCode=" & Forms!FXVolatility.cboCurve.Value & " AND MaxOfMarkAsOfDate=#" & MaxOfMarkAsofDate & "# ORDER BY MaxOfMarkAsOfDate "

debug.print strSQL

Set rs = CurrentDb.OpenRecordset(strSQL, Type:=dbOpenDynaset, Options:=dbSeeChanges)

打印出来的

SELECT * FROM FXData WHERE ShortCode=USD.XS AND MaxOfMarkAsOfDate=#3/31/2016# ORDER BY MaxOfMarkAsOfDate 

但是,这给了我一个“参数太少,预期为 1”的错误。

strSQL 中引用的所有字段及其关联值都存在于被引用的表中。可能是什么错误?

此外,如果您有任何有关如何调试/识别这些特定访问 SQL 格式问题的资源,我很高兴听到它们。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    在 SQL 中,字符串需要放在单引号或双引号中。因此,您的输出应如下所示:

    ... WHERE ShortCode='USD.XS' ...
    

    因此,您的代码变为:

    strSQL = "SELECT * FROM FXData WHERE ShortCode='" & _
             Replace(Forms!FXVolatility.cboCurve.Value, "'", "''") & _
             "' AND MaxOfMarkAsOfDate=#" & MaxOfMarkAsofDate & _
             "# ORDER BY MaxOfMarkAsOfDate "
    

    Replace 确保所有出现在 cboCurve.Value 的单引号都被正确转义。


    请注意,建议使用 参数 而不是字符串连接将值“填充”到 SQL 语句中。在这个问题的答案中可以找到如何在 MS Access 中执行此操作的示例:

    【讨论】:

    • 感谢您解决了问题!我也很欣赏这个资源
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多