【问题标题】:Too few parameters in Access VBAAccess VBA 中的参数太少
【发布时间】:2015-01-06 04:41:44
【问题描述】:

我正在尝试在 VBA 中运行此 SQL 语句,但由于某种原因,它说参数太少并且它预期为 1。我无法弄清楚它在哪一行。任何帮助将不胜感激。

strCount = "INSERT INTO MarketSegmentTotals([State Medicaid], [Commercial], [HIX], [MMP], [CMS Part D (CY " & intYear & ")], [CMS Part D (CY " & (intYear + 1) & ")] ) " & _
"SELECT A.cnt, B.cnt, C.cnt, D.cnt, E.cnt, F.cnt " & _
"FROM ( " & _
    "SELECT COUNT([FORMULARY ID]) as cnt " & _
    "FROM ImportMetricsIDs " & _
    "WHERE [Market Segment]= 'State Medicaid' " & _
") AS A " & _
", ( " & _
    "SELECT COUNT([FORMULARY ID]) as cnt " & _
    "FROM ImportMetricsIDs " & _
    "WHERE [Market Segment]= 'Commercial' " & _
") as B " & _
", ( " & _
    "SELECT COUNT([FORMULARY ID]) as cnt " & _
    "FROM ImportMetricsIDs " & _
    "WHERE [Market Segment]= 'HIX' " & _
") AS C " & _
", ( " & _
    "SELECT COUNT([FORMULARY ID]) as cnt " & _
    "FROM ImportMetricsIDs " & _
    "WHERE [Market Segment]= 'MMP' " & _
") AS D "

strCount2 = strCount & _
", ( " & _
    "SELECT COUNT([FORMULARY ID]) as cnt " & _
    "FROM ImportMetricsIDs " & _
    "WHERE [Market Segment]= 'CMS Part D (CY ' & (intYear) & ')'" & _
") AS E " & _
", ( " & _
    "SELECT COUNT([FORMULARY ID]) as cnt " & _
    "FROM ImportMetricsIDs " & _
    "WHERE [Market Segment]= 'CMS Part D (CY ' & (intYear + 1) & ')'" & _
") AS F "

【问题讨论】:

  • 我猜 (CY ' & (intYear) & ') 应该是 (CY " & (intYear) & ")(intYear + 1) 也是如此),但实际上您可能应该使用存储过程。
  • 您能否在不涉及 VBA 的情况下直接针对您的数据源运行此查询并使其正常运行?这个查询似乎有一些奇怪的地方(比如你的子查询没有连接)。一个简单的方法是在您的 db.Execute 行之前添加一个 Debug.Print strCount2,然后在您的即时窗口中,您可以复制生成的查询并针对您的数据源运行它。
  • Keven 建议的美妙之处在于,当您从即时窗口复制语句文本,将其粘贴到查询设计器中新查询的 SQL 视图中并尝试运行它时,Access 将显示一个要求您为参数提供值的输入框。该输入框包含参数的名称。参数名称是什么?

标签: sql ms-access vba ms-access-2010


【解决方案1】:

我认为您的陈述文本中的引号有问题。当我在即时窗口中测试时,根据您的代码查看这段摘录:

intYear = 2015
? "WHERE [Market Segment]= 'CMS Part D (CY ' & (intYear) & ')'"
WHERE [Market Segment]= 'CMS Part D (CY ' & (intYear) & ')'

这不可能。当 Access 尝试执行查询并看到 intYear 时,它会将其解释为一个参数,因为 db 引擎对名为 intYear 的 VBA 变量一无所知。

我认为它应该是这样的:

? "WHERE [Market Segment]= 'CMS Part D (CY " & (intYear) & ")'"
WHERE [Market Segment]= 'CMS Part D (CY 2015)'

我鼓励您遵循 KevenDenen 的建议,在代码构建完 strCount2 字符串后将 Debug.Print strCount2 添加到代码中。然后您可以运行代码并在立即窗口中查看已完成语句的文本。 (您可以使用 Ctrl+g 转到“立即”窗口。)检查代码要求 Access 执行的实际语句非常有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多