首页 > 解决方案 > 如何从 VBA Excel 返回多个 SELECT 语句

问题描述

我在 Excel 中有一个 VBA 过程设置,可以将一些文本插入 Excel 选项卡,并将其作为命令文本发送,以完成 SQL 查询。

但是,在我的查询中,我有 3 个不同的表要分别返回(因此我的 VBA 代码中有 3 个不同的连接)。

有没有办法使用我的查询来返回三个不同的表,这样我就不必为了在最后获取不同的选择语句而单独运行 3 次查询?

查询代码结束:

SELECT * FROM #MailMergeFormatStep1
SELECT * FROM #MailMergeFormatStep2
SELECT * FROM #MailMergeFormatStep3

我希望运行每个选择语句的结果并将其返回到 Excel 中的单独表连接中。

代码:

Sub UploadCheckerQuery()

ActiveWorkbook.Connections("UploadCheckerConnection1").ODBCConnection.CommandText = Sheets("SQL1").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection1").Refresh

ActiveWorkbook.Connections("UploadCheckerConnection2").ODBCConnection.CommandText = Sheets("SQL2").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection2").Refresh

ActiveWorkbook.Connections("UploadCheckerConnection3").ODBCConnection.CommandText = Sheets("SQL3").Range("A5:A400").Value
ActiveWorkbook.Connections("UploadCheckerConnection3").Refresh

End Sub

标签: sql-serverexcelvba

解决方案


从单个查询返回多个记录集是完全可能的——这就是 ADO 命令 NextRecordset 的用途。完整的详细信息在这里, 但只是简单地使用以下方法加入查询:“SELECT * FROM table1;SELECT * FROM table2”。但是,多个记录集必须位于同一连接上。

 Dim rs as new recordset
 set rs = connections(1).execute("Select * from table1:select * from table2)
 msgbox rs(0)
 rs.nextrecordset
 msgbox rs(0)

推荐阅读