访问 VBA 在 SQL 中创建另一个 SQL 查询使用的临时查询
Access VBA Create a Temporary Query in SQL that another SQL query uses
我对 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
拜托,如果您能提供任何帮助,我将不胜感激。谢谢!!
要创建查询,您可以使用 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"
我对 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
拜托,如果您能提供任何帮助,我将不胜感激。谢谢!!
要创建查询,您可以使用 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"