如何将3个查询合并到一个记录集中

时间:2017-12-05 23:03:56

标签: sql vba excel-vba ms-access excel

我需要从三个访问SQL查询导出到excel摘要统计信息,如下所示。这些是在vba中编程的:

strSQL2 = "SELECT * FROM qry_pp_prev2;"
strSQL3 = "SELECT * FROM qry_pp_prev3;"
strSQL4 = "SELECT * FROM qry_pp_prev4;"

'trying to merge the 3 queries above
Set db = CurrentDb()
Set rs = db.OpenRecordset(strSQL2)
Set rs1 = db.OpenRecordset(strSQL3)
Set rs2 = db.OpenRecordset(strSQL4)

'to create excel template
Set objXL = CreateObject("Excel.Application")
Set objWB = objXL.Workbooks.Add()
Set objWS = objWB.Worksheets("Sheet1")


With objWS
.cells(1, 1).Value = "X reporting tool"
.cells(2, 1).Value = "District"
.cells(2, 2).Value = Me!subd
 .......

将所有查询放入一个文件访问权限的问题表明它太复杂,因此不提供输出。但是,当我使用上面的内容来合并SQL查询并让它们全部导出数据到从访问vba创建的模板中时,结果不准确。

目前,大多数模板中的结果都是空白的,excel模板的某些部分有一些值?

希望这有道理吗?

2 个答案:

答案 0 :(得分:1)

不是答案,只是一个大评论

如果所有查询都返回相同数量的列,则可以轻松执行此操作:

strSQL_union = "SELECT * FROM qry_pp_prev2  UNION ALL"
strSQL_union = strSQL_union + " SELECT * FROM qry_pp_prev3 UNION ALL"
strSQL_union = strSQL_union + " SELECT * FROM qry_pp_prev4;"

你只会以一个结果集结束。

答案 1 :(得分:0)

好的,所以我知道您正在询问如何使用VBA执行此操作,但是有一个新的(ish)解决方案专门用于在没有VBA代码的情况下执行此操作。

对于Excel 2010和2013,它是一个名为“Power Query”的加载项。在Excel 2016中,它在数据菜单下本地集成为“获取和转换”。

使用此解决方案,您将浏览向导以定义3个连接,并描述如何将数据合并到一个表中。您可以使用DSN或通过向导创建连接等。

BAM,就是这样。

“Data Refresh All”将连接到3个数据源并将它们组合成一个表。

我假设您要附加数据。它做得很好。但是,如果您尝试加入表格,也可以支持。

我已经完成了你想用VBA做多年的事情,我对“Power Query”/“Get and Transform”可以做的事情感到震惊。我可以回去摆脱我的大部分代码。

以下是一些要查看的资料:

Getting Started with Get and Transform

Introduction to Microsoft Power Query for Excel