我正在尝试运行以下查询:
SELECT Project.* FROM Project WHERE (((Projects.[End Date (PPL)])>=DateAdd('m',-6,Date())));
它在Access(2007)中运行良好但是当我将其移动到VBA时:
strQry = "SELECT Project.* FROM Project WHERE (((Projects.[End Date (PPL)])>=DateAdd('m',-6,Date())));"
我收到一条错误消息“没有为一个或多个必需参数指定值”
我可以使用以下代码运行它,但它没有提供正确的信息:
strQry = "SELECT Project.* FROM Project WHERE Project.[End Date (PPL)] >= DateAdd('m',-6,Date());"
任何帮助都会很棒。
答案 0 :(得分:3)
您的问题的最终答案就在这里,在StackOverflow中:
VBA function in Excel ADODB query
简短的回答是:
您正在使用名为Jet-SQL的SQL方言,大多数人都是从Microsoft Access调用它,这是一个使VBA函数可供SQL引擎使用的数据库应用程序。
如果从任何其他平台运行Jet SQL(如ODBC或ADODB包装器) - VBA功能不可用:您拥有的就是Jet-SQL本机功能。
这里有一个原生Jet-SQL函数的列表:它几乎完成了,你可以看到它相当短:
MS Access: Functions - Listed by Category
......它并不包括NZ()
这些功能看起来像熟悉的VBA有点令人困惑 - 并且令人讨厌列出它们的网页被标记为“MS-Access'而不是Jet SQL。
该列表中有一个有趣的项目:内联'如果'函数IIF()
,你可以用它代替NZ:
SELECT
IIF(
table1.[RIC] IS NOT NULL,
table1.[RIC],
table2.[ISIN] + ', CODE:ISIN'
) AS [RetrievalCode],
table3.[Value],
table3.[DateStamp]
FROM
* The rest of your Query *
希望有所帮助:我怀疑它不会,因为您可能正在调用命名查询(或其中带有命名子查询的SQL),并且这些查询中的所有非本机函数调用都是无效的,除非整个事情都是从MS-Access中调用的。
当然,您可以制作一个'架构'查询并解压缩SQL,解析出来,并用本机Jet-SQL函数替换所有VBA。但是,如果你超出了它的预期环境--Microsoft Access中的Query-By-Example可视化查询构建器 - Jet-SQL的语法会变得神秘 - 所以这个建议可能比做一些更多的时间和麻烦其他方式。