2015-01-31 51 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