Access VBA 在 SQL 中创建另一个 SQL 查询使用的临时查询

msi*_*sim 0 sql ms-access vba

我有一个关于在 Access VBA 中运行 SQL 的问题。我基本上想在 vba 中创建一个查询,但不想让它成为我的数据库中的查询。它只是坐在那里,不可见,直到使用它的操作完成,然后它就会被删除。

我的代码如下(简化以关注这个问题)。我认为我这样做不对,因为我认为在第二个查询中我需要做这" & 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
Run Code Online (Sandbox Code Playgroud)

请,如果您能提供任何帮助,我将不胜感激。谢谢!!

Mar*_*kal 5

要创建查询,请使用 CreateQueryDef 命令

Dim qdf As DAO.QueryDef

Set qdf = CurrentDb.CreateQueryDef("MyQuery", "SELECT * FROM Table1")
Run Code Online (Sandbox Code Playgroud)

现在您可以像平常一样在 SQL 命令中使用查询,例如

"UPDATE MyTable INNER JOIN MyQuery ON ..."
Run Code Online (Sandbox Code Playgroud)

要删除它,您可以使用 QueryDefs.Delete

CurrentDb.QueryDefs.Delete "MyQuery"
Run Code Online (Sandbox Code Playgroud)