【发布时间】:2021-03-16 13:42:17
【问题描述】:
请注意:为查询名称道歉,我只是需要它出现在列表顶部,而我正在努力弄清楚!
表格 - Mortalityinput
查询 - AAAAAAINmax
我正在尝试编写一个宏以从我的数据表中删除最后/最大日期的数据,例如(如果最近的数据是 3 月 8 日,有 5 条记录,我想删除所有这些记录)
我的第一步是创建一个查询来确定最大可用日期:
SELECT Max(Format(Mortalityinput.[Created Date],"dd/mm/yyyy")) AS Expr1 FROM Mortalityinput;
我不得不使用格式,因为创建日期下降到 hh/mm/ss,所以只有最新的时间记录会在我想要当天的所有记录的地方被提取。
第二步是创建一个查询,该查询从死亡率输入中选择数据,其[Created Date] 与最大日期匹配。如下查询:
SELECT *
FROM Mortalityinput AS inp
INNER JOIN
(SELECT Max(format(Mortalityinput.[Created Date],"yyyy/mm/dd")) AS MaxDate
FROM Mortalityinput) AS grp
ON format(inp.[Created Date],"yyyy/mm/dd") = grp.[MaxDate];
效果很好,但是我很难真正删除记录,我尝试使用:
Private Sub Command14_Click()
myVar = DMax("[Created Date]", "Mortalityinput")
MsgBox (myVar)
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Set dbs = CurrentDb
lcSQL = "SELECT AAAAAAINmax.[ID] from AAAAAAINmax.[ID] AS IDmax"
Set rst = dbs.OpenRecordset(lcSQL)
Do While Not rst.EOF
lcSQL = "DELETE Mortalityinput.ID FROM Mortalityinput WHERE Mortalityinput.ID=" +
Str(rst.Fields("IDmax"))
DoCmd.SetWarnings False
DoCmd.RunSQL (lcSQL)
DoCmd.SetWarnings True
rst.MoveNext
Loop
End Sub
我确实阅读了Database.Execute 方法,并考虑过与其将表中的 ID 与查询匹配,不如删除具有相同创建日期的任何内容,但我无法让它在行:
Set dbNewInitiatives = CurrentDb
strSQL = "DELETE FROM [Mortalityinput]" _
& " WHERE format(AAAAAAINmax.[Created Date],"" DD/MM/YYYY"") = " & myVar
dbNewInitiatives.Execute strSQL, dbFailOnError
抱歉,如果这对任何人来说都是痛苦的,Access 和 SQL 不是我的强项。 我还尝试在设计模式下编写/创建一个简单的 SQL 语句,但是当我尝试运行它时,我收到一条消息,询问我指的是哪个表。
请有人让我摆脱痛苦。
谢谢!
【问题讨论】:
-
对于 DAO,删除语法为
DELETE Mortalityinput.* FROM ...