2015-01-31 54 views
0

我有一個關於在Access VBA中運行SQL的問題。我想基本上在vba中創建一個查詢,但沒有它是我的數據庫中的查詢。它只是坐在那裏,不可見,直到使用它的操作完成,然後它纔會消失。訪問VBA在SQL中創建另一個SQL查詢使用的臨時查詢

我的代碼如下(簡化以關注此問題)。我不認爲我這樣做是對的,因爲我認爲在第二個查詢中我需要做" & ECStart2SQL & "的事情,但我不知道當我需要引用一個值時它是如何工作的。

Private Sub TimeReportingButton_Click() 
'THIS IS THE 1ST QUERY 
Dim ECStart2SQL As String 
ECStart2SQL = "SELECT D1.[#], (SELECT Count(*) FROM tbl_Data D2 WHERE D2.[#] = D1.[#] AND D2.[tsUpdated] <= D1.[tsUpdated]) AS Sequence, D1.tsUpdated FROM tbl_Data AS D1 WHERE ((((SELECT Count(*) FROM tbl_Data D2 WHERE D2.[#] = D1.[#] AND D2.[tsUpdated] <= D1.[tsUpdated]))=1)) ORDER BY D1.[#]" 


'THIS IS THE 2ND QUERY, THE UPDATE QUERY, THAT REFERS TO THE FIRST ONE 
Dim UpdECStartRank2SQL As String 
UpdECStartRank2SQL = "UPDATE tbl_TimeReporting INNER JOIN ECStart2SQL ON tbl_TimeReporting.[#] = ECStart2SQL.[#] SET tbl_TimeReporting.ECStart = [ECStart2SQL]![tsUpdated] WHERE (((tbl_TimeReporting.ECStart) Is Null) AND ((tbl_TimeReporting.Sequence)=2))" 

'OPERATION 
DoCmd.SetWarnings False 
DoCmd.RunSQL UpdECStartRank2SQL 
MsgBox "Done!", , "Done!" 
DoCmd.SetWarnings True 

End Sub 

請,如果你能提供任何幫助,我會很感激。謝謝!!

回答

2

要創建使用CreateQueryDef命令

Dim qdf As DAO.QueryDef 

Set qdf = CurrentDb.CreateQueryDef("MyQuery", "SELECT * FROM Table1") 

現在你可以使用查詢的SQL命令,就像你通常會查詢,例如

"UPDATE MyTable INNER JOIN MyQuery ON ..." 

,並刪除它,你使用QueryDefs .Delete

CurrentDb.QueryDefs.Delete "MyQuery" 
+0

要添加Marek,因爲他正在運行動作查詢,所以不需要DAO.Recordset。 OP的文章中的原始更新SQL將起作用。 – Parfait 2015-01-31 23:01:54

+1

當然,我只是以此爲例。但我想我應該改變它,所以它不會造成任何混淆 – 2015-01-31 23:06:59

+0

這是非常好的,我的代碼現在工作,我期待着更多地瞭解這一點。非常感謝!! – msim 2015-02-01 00:12:27