首页 > 解决方案 > 尝试使用宏/SQL 语句从表中删除 (Ms Access)

问题描述

请注意:为查询名称道歉,我只是需要它出现在列表顶部,而我正在努力弄清楚!

桌子 -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 语句,但是当我尝试运行它时,我收到一条消息,询问我指的是哪个表。

请有人让我摆脱痛苦。

谢谢!

标签: sqlvbams-access

解决方案


您需要从双方删除时间部分。此外,无需提及查询名称 AAAAAINmax。

试试这个:

myVar = Format(DMax("[Created Date]", "Mortalityinput"), "DD/MM/YYYY")

Set dbNewInitiatives = CurrentDb
strSQL = "DELETE FROM [Mortalityinput]" _
       & " WHERE Format([Created Date],'DD/MM/YYYY') = '" & myVar & "'"
dbNewInitiatives.Execute strSQL, dbFailOnError

推荐阅读