细节:
我有一个 MS-Access 数据库过程,我在数据库中本地创建表。但是,我想确保我创建的表已经过测试,如果测试失败,我需要删除/删除已创建的其他表。我猜基本上是一个回滚过程。
问题:
我遇到了两种删除表的方法,但无法弄清楚是否其中一种方法的优点多于缺点等......
有人能告诉我有什么区别吗?
非常感谢!
DoCmd.DeleteObject acTable, "aaaTest"
...和...
Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.Execute "DROP TABLE [aaaTest]", dbFailOnError
...和...
Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.TableDefs.Delete "aaaTest"
...都是完成同一件事的不同方式。他们删除TableDef
具有该名称的本地对象(实际的本地表或表链接)。
@gordthompson 简洁地解释了三种删除表的方法。在测试他的方法时,我注意到了一个不同之处。我正在脱机工作,并且在后端有链接表,指向客户端网络上的 Access 表。当我尝试使用 Access UI 删除链接表时,每个表可能需要 30 多秒。这很烦人。
根据戈德的例子,我发现......
DoCmd.DeleteObject acTable, "aaaTest" ' is very slow, just like the Access UI.
CurrentDb.Execute "DROP TABLE [aaaTest]", dbFailOnError ' is immediate.
CurrentDb.TableDefs.Delete "[aaaTest]" ' is also immediate
如果您的表名包含破折号或其他特殊字符,则将名称包含在 [方括号] 中应该可以解决问题。
我刚刚发现 DropTable 不喜欢带有破折号的表名。我有很多,所以我在使用 droptable 删除它们之前使用 DoCmd.Rename 重命名表。这对我来说是最简单的解决方法,因为我有 15 个带有破折号的表和 60 个在退出时删除以清理临时文件的表。