【发布时间】: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