9

细节:

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

问题:

我遇到了两种删除表的方法,但无法弄清楚是否其中一种方法的优点多于缺点等......

有人能告诉我有什么区别吗?

非常感谢!

4

3 回答 3

16
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具有该名称的本地对象(实际的本地表或表链接)。

于 2013-04-11T11:01:12.073 回答
2

@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

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

于 2020-04-09T02:43:28.613 回答
0

我刚刚发现 DropTable 不喜欢带有破折​​号的表名。我有很多,所以我在使用 droptable 删除它们之前使用 DoCmd.Rename 重命名表。这对我来说是最简单的解决方法,因为我有 15 个带有破折号的表和 60 个在退出时删除以清理临时文件的表。

于 2017-08-31T19:07:06.440 回答