我正在Excel VBA中編寫一個函數,用於對使用MS Access 2003創建的數據庫執行存儲查詢。當存儲的查詢是簡單查詢如果查詢是UNION
,則不應該。例如,我使用以下代碼以執行該存儲的查詢:Excel VBA執行MS Access 2003中存儲的UNION查詢
Public Function QueryDB()
Dim cn As Object
Dim strConnection As String
Set cn = CreateObject("ADODB.Connection")
' Hard code database location and name
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\server1\myDatabase.mdb"
' Open the db connection
cn.Open strConnection
' Create call to stored procedure on access DB
Dim cmd As Object
Set cmd = CreateObject("ADODB.Command")
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "testQuery"
cmd.ActiveConnection = cn
' Execute stored query
Dim rs As ADODB.Recordset
Set rs = cmd.Execute()
MsgBox rs.Fields(0) ' prints as expected
QueryDB2 = rs.Fields(0)
' close connections
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Function
如果testQuery
是一個簡單的查詢(例如,不使用UNION
),然後按預期的方式返回的數據。但是,如果testQuery
包含UNION
,則Excel VBA代碼將失敗(並且不會返回特定的錯誤)。我該如何解決這個問題?我想避免在VBA中編寫SQL語句。
同樣,這不幸的只適用於常規查詢,而不適用於包含UNION語句的查詢。 –
非常有趣,因爲我在上面用聯合查詢進行了測試。你能發佈你的聯合SQL查詢,甚至可能是樣本數據嗎? – Parfait
儘管這個查詢沒有意義,但它仍然是我能想到的最簡單的,並且不起作用。 'SELECT * FROM myTable UNION SELECT * FROM myTable;'。我在數據庫中保存了這個查詢,當試圖訪問Excel中的結果集時,VBA返回運行時錯誤*「無效的SQL語句;預期的'DELETE','INSERT','PROCEDURE','SELECT' ,或'UPDATE'。「* –