DoCmd.DeleteObject acTable Vs.有什么区别DROP TABLE

时间:2013-04-11 09:30:35

标签: vba ms-access access-vba

详细信息:

我有一个MS-Access数据库程序,我在数据库中本地创建表。但是,我想确保对我创建的表进行测试,如果测试失败,我需要删除/删除已创建的其他表。基本上我认为是一个回滚过程。

问题:

我遇到了删除表格的两种方法,但无法弄清楚一个人是否有更多的利弊等...

有人可以告诉我有什么区别吗?

非常感谢!

3 个答案:

答案 0 :(得分:11)

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对象(实际的本地表或表链接)。

答案 1 :(得分:1)

@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

如果表名包含破折号或其他特殊字符,则将该名称包装在[方括号]中即可解决此问题。

答案 2 :(得分:0)

我刚刚发现DropTable并不喜欢带有破折​​号的表名。我有很多,所以我使用DoCmd.Rename重命名表,然后我使用droptable擦除它们。这对我来说是最容易修复的,因为我有15个带破折号的表和60个一起在退出时删除以清理临时文件的表。