我正在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'。“* –