我正在尝试从Excel 2007 VBA脚本在Access 2007数据库中运行查询。 Access查询具有名为“Year”和“Month”的参数。
我正在尝试使用以下代码:
Sub RunMyQuery()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim dbPath As String
Dim stQRY As String
Dim stCon As String
Dim cmd As New ADODB.Command
Dim prmYear As New ADODB.Parameter
Dim prmMonth As New ADODB.Parameter
dbPath = "<PATH_TO_MY_DB>"
stCon = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=" & dbPath & ";"
cn.Open (stCon)
cn.CursorLocation = adUseClient
Set cmd.ActiveConnection = cn
Set prmYear = cmd.CreateParameter("Year", adNumeric, adParamInput, , 2011)
Set prmMonth = cmd.CreateParameter("Month", adNumeric, adParamInput, , 5)
cmd.Parameters.Append prmYear
cmd.Parameters.Append prmMonth
cmd.CommandText = "SELECT * FROM [Month_Totals]"
cmd.CommandType = adCmdTable
Set rs = cmd.Execute
Sheets("Sheet1").Range("A1").CopyFromRecordset rs
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
当我运行此代码时,代码将在“cmd.Execute”中停止,并带有
运行时错误'-214217900(80040e14)':
FROM子句中的语法错误。
我出错了什么?
命令文本对我来说似乎很简单。我错过了什么吗?
我是否滥用了ADODB.Command的参数功能?我不认为这是问题所在,因为我已经尝试使用非参数化查询来替换Month_Totals来运行相同的脚本,并得到了相同的错误。
答案 0 :(得分:0)
我相信这些参数仅供您在访问时使用已保存的查询时使用。我会通过将参数移动到SQL语句来解决您的问题。
更改
"SELECT * FROM [Month_Totals]"
到
"SELECT * FROM [Month_Totals] WHERE Year = 2011 AND Month = 5"
答案 1 :(得分:0)
返回错误的原因是命令类型设置为adCmdtable
,但命令不引用表,它引用SQL字符串,因此:
cmd.CommandType = adCmdText
接下来,为了返回特定数据,您需要包含一个WHERE子句,其中字段名称的参数顺序正确:
cmd.CommandText = "SELECT * FROM [Month_Totals] Where [Year]=? AND [Month]=?"