【问题标题】:Running SQL through VBA通过 VBA 运行 SQL
【发布时间】:2015-10-07 01:22:28
【问题描述】:

我正在尝试运行以下查询:

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());"

任何帮助都会很棒。

【问题讨论】:

  • 这个表叫Project还是Projects?
  • 您是在 Excel 中运行它吗? DateAdd 函数在 Excel 中的工作方式与在 Access 中的工作方式相同吗?当您说它没有提供正确的信息时,该信息有什么不正确之处?这将为您提供需要调整的线索。
  • @ScottHoltzman, DateAdd() 是 Access SQL 中的一个函数,只要 Excel 通过 ODBC 连接到 Access,查询就可以使用任何 Access SQL 函数/语法,而不管 Excel,就像 Access 连接到SQL Server 通过 ODBC,查询可以在 Access 之外使用 MSSQL 中的任何语法,因为处理发生在外部数据库引擎中,并且只有数据被发送回客户端(这里是 Excel)。
  • 请提供更多代码,例如 Excel/Access 之间的 ODBC 连接、可用表和架构:项目和/或项目。
  • @Parfait 我认为这不对。我无法通过 ODBC 或 OLEDB 使用 Nz() 函数。只有 JET* 功能可用,而 Access 特定功能不可用。

标签: vba excel


【解决方案1】:

您的问题的明确答案在 StackOverflow 中:

VBA function in Excel ADODB query

简短的回答是:

您正在使用一种称为 Jet-SQL 的 SQL 方言,大多数人从 Microsoft Access 中调用它,这是一种数据库应用程序,它使 SQL 引擎可以使用 VBA 功能。

如果您从任何其他平台(如 ODBC 或 ADODB 包装器)运行 Jet SQL,则 VBA 函数不可用:您所拥有的只是 Jet-SQL 本机函数。

这里有一个原生 Jet-SQL 函数的列表:它几乎是完整的,你可以看到它相当短:

MS Access: Functions - Listed by Category

...而且它不包括 NZ()

这些函数看起来像熟悉的 VBA 有点令人困惑 - 并且令人讨厌的是列出它们的网页被标记为“MS-Access”而不是 Jet SQL。

该列表中有一个有趣的项目:内联 'If' 函数,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。但是,当您在预期的环境之外时,Jet-SQL 的语法会变得晦涩难懂——Microsoft Access 中的 Query-By-Example 可视化查询构建器——因此与其他方式相比,这种建议可能会花费更多时间和麻烦。

【讨论】:

  • 很好的答案,但它是项目而不是项目。好笑。
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 2020-02-24
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多