Ошибка при запуске запроса параметров из Access 2007 в Excel VBA - PullRequest
2 голосов
/ 30 июня 2011

Я пытаюсь выполнить запрос в базе данных Access 2007 из сценария VBA Excel 2007.Запрос Access имеет параметры с именами «Год» и «Месяц».

Я пытаюсь заставить работать следующий код:

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, и получил ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2011

Причина, по которой возвращается ошибка, заключается в том, что тип команды установлен на adCmdtable, но команда не ссылается на таблицу, она ссылается на строку SQL, поэтому:

cmd.CommandType = adCmdText

Далее, чтобы вернуть конкретные данные, необходимо включить предложение WHERE с именами полей в правильном порядке для параметров:

cmd.CommandText = "SELECT * FROM [Month_Totals] Where [Year]=? AND [Month]=?"
0 голосов
/ 25 сентября 2011

Я считаю, что параметры используются только при использовании сохраненного запроса в доступе. Я бы решил вашу проблему, перенеся параметры в SQL-статистику.

Изменение

"SELECT * FROM [Month_Totals]"

до

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