【问题标题】:Error when running a parameter query from access 2007 in excel vba在 excel vba 中从 access 2007 运行参数查询时出错
【发布时间】:2011-09-26 05:22:42
【问题描述】:

我正在尝试通过 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 运行相同的脚本,并得到相同的错误。

【问题讨论】:

  • 我不知道这是否适用(我直接在Access中工作所以从不使用ADODB),但我认为没有命名参数,所以您需要按顺序使用它们。

标签: excel ms-access vba parameters syntax-error


【解决方案1】:

返回错误的原因是命令类型设置为adCmdtable,但是该命令没有引用表,它引用了一个SQL字符串,所以:

cmd.CommandType = adCmdText

接下来,为了返回特定的数据,您需要包含一个 WHERE 子句,其中字段名称按正确的顺序排列参数:

cmd.CommandText = "SELECT * FROM [Month_Totals] Where [Year]=? AND [Month]=?"

【讨论】:

    【解决方案2】:

    我相信这些参数仅在您在访问中使用保存的查询时使用。我会通过将参数移动到 SQL 语句中来解决您的问题。

    改变

    "SELECT * FROM [Month_Totals]"
    

    "SELECT * FROM [Month_Totals] WHERE Year = 2011 AND Month = 5"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多