2011-06-30 43 views
2

我試圖從Excel 2007 VBA腳本在Access 2007數據庫中運行查詢。 Access查詢具有稱爲「年」和「月」的參數。在Excel中運行參數查詢訪問2007時出現錯誤vba

我試圖讓下面的代碼工作:

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

我不知道這是否適用(我工作直接訪問,所以不要使用ADODB),但我認爲沒有命名參數,所以你需要通過命令來處理它們。 –

回答

0

我相信這些參數僅用於在訪問中使用保存的查詢時使用。我將通過將參數移入SQL語句來解決您的問題。

變化

"SELECT * FROM [Month_Totals]" 

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

其原因,這是返回錯誤是,命令類型被設置爲adCmdtable,但該命令不引用表,它引用了一個SQL字符串,所以:

cmd.CommandType = adCmdText 

接下來,爲了返回特定的數據,你需要包含一個WHERE子句,以正確的順序爲參數字段名稱:

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