2017-06-01 129 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)