【问题标题】:Trying to use a Macro/SQL statement to delete from a table (Ms Access)尝试使用宏/SQL 语句从表中删除 (Ms Access)
【发布时间】: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 ...

标签: sql vba ms-access


【解决方案1】:

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

试试这个:

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

【讨论】:

    【解决方案2】:

    SELECT 查询错误 应该是这样的

    lcSQL = "SELECT [ID] AS IDmax from AAAAAAINmax "
    

    【讨论】:

    • Francesco - 我现在有一个错误 13 - 代码类型不匹配:lcSQL = "DELETE Mortalityinput.ID FROM Mortalityinput WHERE Mortalityinput.ID=" + Str(rst.Fields("IDmax")) 是有更简单的删除方法,即批量删除而不是循环?
    • DELETE * FROM ...,您不能删除单个值,使用 DELETE 可以删除整行
    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2011-03-04
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多