2017-06-01 665 views
2

我一直在寻找一种简单的方法来做到这一点,但我遇到的大多数答案都是用切线代替直接解决这个问题。SQL从Excel VBA:从SQL查询中创建VBA中的临时表(供重用)

下面是一个简单的SQL代码段,我想通过VBA

运行
SELECT * INTO ##Customers FROM Addresses 
SELECT * FROM ##Customers a LEFT JOIN PostageRate b ON a.ZipCode=b.ZipCode 

然后我需要把所有的数据到一个Excel工作表。

到目前为止,我能够执行:

SELECT * FROM Addresses 

这是第一次查询的功能相当于没有临时表。我登陆了一个RecordSet,然后我使用CopyFromRecordSet将其放入表单中,但我不知道如何将此RecordSet转换为表格,以便查询第二个查询,我在其中执行了LEFT JOIN,然后放入由此产生RecordSet在工作表上。

当然,我试图运行的查询比这个更复杂,但这说明了我试图实现的目标。

道歉,如果我错过了一个回答这个问题的帖子,但我还没有碰到它。

谢谢!

编辑:我已经研究把数据从第一个查询放到工作表上,并将工作表视为第二个查询的表。问题如下: 工作表是本地的,第二个表位于数据库上。根据this question,数据库需要有权访问Excel工作表。它不是。有关如何通过VBA实现临时表的更多见解将不胜感激。谢谢大家!

+1

您可以通过ACE.OLEDB提供程序通过ADODB查询Excel表单。床单是桌子。 – jivko

+0

我不明白为什么你不能只使用子查询,或者有一个表值函数来构建一个临时表。为什么你需要临时表存在于Excel中?我想这是有道理的,如果你的第二个查询是在不同的数据源... – JeffUK

+0

@JeffUK我不介意临时表是在DB服务器而不是本地表中创建的。你能通过Excel VBA指出我正确的方向吗? 感谢您的帮助! – VegasVed

回答

0
SELECT * FROM 
(SELECT * from [Addresses]) AS Customer 
LEFT JOIN PostageRate 
ON (customer.zipcode = PostageRate.zipcode)