【发布时间】:2013-04-11 09:30:35
【问题描述】:
详情:
我有一个 MS-Access 数据库过程,我在数据库中本地创建表。但是,我想确保我创建的表已经过测试,如果测试失败,我需要删除/删除其他已创建的表。我猜基本上是一个回滚过程。
问题:
我遇到了两种删除表的方法,但无法弄清楚其中一种是否有更多的利弊等等......
谁能告诉我有什么区别?
非常感谢!
【问题讨论】:
详情:
我有一个 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 多秒。很烦人。
根据 Gord 的例子,我发现...
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 个在退出时删除以清理临时文件的表。
【讨论】: