我在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格式问题的资源,我很乐意听到它们。
答案 0 :(得分:3)
在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中执行此操作的示例,请参阅此问题的答案: