Access VBA中的参数太少

时间:2015-01-05 19:27:18

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

我试图在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 "

1 个答案:

答案 0 :(得分:1)

我认为您的声明文字中的引号存在问题。在立即窗口中测试时,根据您的代码查看此摘录:

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

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

我认为它应该是这样的:

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

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