在 Ms access 中一次性删除所有表

Delete all tables in one shot in Ms access

这是我的 VBA 代码,它试图遍历名称中包含 PB(PB 是所有表的前两个字母)的所有表并删除它们。我在 DoCmd

收到错误消息
Option Compare Database
Option Explicit

Public Sub del_all_tables()
   Dim db As DAO.Database
   Dim tdf As DAO.TableDef
   Set db = CurrentDb

   For Each tdf In db.TableDefs
       If Not (tdf.Name Like "PB*") Then
           DoCmd.DeleteObject acTable, tdf.Name
       End If
   Next
End Sub

编辑:我不想删除表本身,而是删除表中的记录

我的原始代码是删除所有 table 无效的代码。我从这里获取了源代码。 https://access-excel.tips/access-vba-loop-through-all-tables/

但是如果您想一次删除多个 table 中的所有记录,则需要分别为每个 table 创建删除查询。

然后您可以使用 VBA 打开每个查询并 运行 使用以下代码:

Option Compare Database
Option Explicit

Public Function RunMyqueries()
DoCmd.OpenQuery "Query1"
DoCmd.OpenQuery "Query2"


MsgBox "Done!"

End Function

就我而言,我有 2 个查询,如果您有更多查询,请继续添加。

此外,您可能希望每次在删除带有 DoCmd.SetWarnings False

的记录之前关闭警告

首先是 docmd 语句中的对象名称导致错误,因为您没有调用完整的对象名称,而是尝试使用 like 运算符。

其次,如果你想删除记录而不是 table,那么你必须使用删除语句。

您可以尝试一下查询设计视图,感受一下 access 中的删除 statement/query 是怎样的。

使用 DELETE 操作 SQL 删除记录。使用 CurrentDb.Execute,不必担心关闭和打开警告。

CurrentDb.Execute "DELETE FROM [" & tdf.Name & "]".

如果您只想从以 PB 开头的表中删除记录,请从条件中删除 Not - 否则您将从所有其他表(包括坏的系统表)中删除。

Public Sub del_all_records()
   Dim db As DAO.Database
   Dim tdf As DAO.TableDef
   Set db = CurrentDb

   For Each tdf In db.TableDefs
       If tdf.Name Like "PB*" Then
           db.Execute "DELETE FROM [" & tdf.Name & "]"
       End If
   Next
End Sub