【问题标题】:How to merge 3 queries into one recordset如何将 3 个查询合并到一个记录集中
【发布时间】:2017-12-05 23:03:55
【问题描述】:

我需要从三个访问 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 查询并将它们全部导出到从 access vba 创建的模板中时,结果不准确。

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

希望这有意义吗?

【问题讨论】:

  • “将所有查询放在一个文件中”您是如何尝试的?您没有显示任何填充 Excel 模板的代码,因此如果 Excel 文件中缺少数据,我们将无法建议更改。
  • 好吧,语句应该说“将所有查询放在一个查询中”。这不会发生,因为查询如此庞大以至于访问 SQL 说查询很复杂,这就是我必须将它们分开的原因。所以我相信问题不在于 excel 的代码,因为我做了两份报告,另一份报告出来很好,查询足够长,不会超出所需的限制
  • “我确信问题不在于代码” - 问题通常与代码或相关,所以我不确定如果没有它我们如何提供帮助。

标签: sql vba excel ms-access


【解决方案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;"

你只会得到一个结果。

【讨论】:

  • 谢谢你会试试这个,但将它们分开的原因是 SQL 抱怨查询太大,因为结果是 1 x n 矩阵,n 超过 255 行。每个月大约有 56 个点,然后将其乘以 12,得到一个 1 乘 672 的矩阵。
【解决方案2】:

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

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

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

BAM,就是这样。

“全部数据刷新”将连接3个数据源,并将它们合并到一个表中。

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

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

这里有一些资源可供参考:

Getting Started with Get and Transform

Introduction to Microsoft Power Query for Excel

【讨论】:

  • 好的,谢谢数据正在被输入到访问中,我们正在使用访问 vba 生成一个 Excel 模板,该模板根据所需的报告填充数据....所以我将检查如何解决这个问题,但是这个考虑到当前已经构建的解决方案,可能会有点困难。
  • 它应该可以工作。电源查询支持的来源之一是 excel 工作簿(除了数据库查询、网站等)。
猜你喜欢
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多