【问题标题】:What is the difference between DoCmd.DeleteObject acTable Vs. DROP TABLEDoCmd.DeleteObject acTable Vs 有什么区别?删除表
【发布时间】:2013-04-11 09:30:35
【问题描述】:

详情:

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

问题:

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

谁能告诉我有什么区别?

非常感谢!

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:
    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 对象(实际的本地表或表链接)。

    【讨论】:

    • 我明白了,我们实际上只是说没有实际差异。没关系。我只是想确保我没有错过一些大的不同!谢谢!
    • 我们一直在尝试删除标题中带有撇号的 ImportError 表,而上面的第二种方法(DROP TABLE)不起作用。但是上面的第一种方法(DeleteObject)工作得很好。谢谢!
    【解决方案2】:

    @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
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-23
        • 2015-11-29
        • 2019-01-09
        • 1970-01-01
        • 2014-07-01
        • 2021-07-16
        • 2013-03-18
        相关资源
        最近更新 更多