【发布时间】:2010-06-23 17:06:22
【问题描述】:
我有以下代码:
CurrentDb.Execute "DROP TABLE [" & DatabaseName & "].[" & TableName & "];"
这将从 MS Access 数据库中删除一个表。通常这是使用共享网络上的数据库完成的。
如何确保DROP 方法在允许控件移动到我的代码中的下一行之前完成?
这是在 VBA MS Access 2003 中完成的;但如果版本会影响答案,我会很感兴趣。
【问题讨论】:
-
呃,是什么让你认为它是异步执行的?我很确定 CurrentDB.Execute 代码行在完成之前不会移动到下一行。你有没有遇到过下面这行代码中CurrentDB.TableDefs中表还存在的情况?
-
这是一个很好的观点。其实,我觉得你是对的。在这种情况下,我正在检查表名是否仍然存在,但是在执行 CurrentDb.Execute 命令之前实例化的数据库对象的“新”副本中。
-
一个问题是,如果您使用 DBEngine(0)(0) 检查表是否仍然存在。在这种情况下,返回数据库对象的调用不会刷新集合,因此在删除之后,该表仍会显示在列表中,除非您在检查之前刷新了 TableDefs 集合。 CurrentDB 每次调用都会刷新所有集合,这是它比 DBEngine(0)(0) 慢得多的主要原因。