我有以下代碼:如何等待執行控制從刪除表中返回?
CurrentDb.Execute "DROP TABLE [" & DatabaseName & "].[" & TableName & "];"
將從MS Access數據庫刪除表。通常這是在共享網絡上使用數據庫完成的。
如何確保DROP
方法在允許控件移動到代碼中的下一行之前完成?
這是在VBA MS Access 2003中完成的;但如果版本影響答案,我會感興趣。
我有以下代碼:如何等待執行控制從刪除表中返回?
CurrentDb.Execute "DROP TABLE [" & DatabaseName & "].[" & TableName & "];"
將從MS Access數據庫刪除表。通常這是在共享網絡上使用數據庫完成的。
如何確保DROP
方法在允許控件移動到代碼中的下一行之前完成?
這是在VBA MS Access 2003中完成的;但如果版本影響答案,我會感興趣。
這是我對河套方法:
Public Function DeleteTable(DatabaseName as String, TableName as String) as Boolean
DeleteTable = False
CurrentDb.Execute "DROP TABLE [" & DatabaseName & "].[" & TableName & "];"
Do
Loop Until TableExists(TableName, DatabaseName) = False
DeleteTable = True
End Function
Public Function TableExists(TableName As String, DatabaseName As String) As Boolean
If 0 = CurrentDb.OpenRecordset("SELECT COUNT(*) As Count FROM [" & DatabaseName & "].[MSysObjects] WHERE [Name] = '" & TableName & "';").Fields("Count").Value Then
TableExists = False
Else
TableExists = True
End If
End Function
你可以用你的CurrentDb.Execute命令在裏面寫一個循環。 在循環內部,您將一個名爲TableName的表的數量存儲在一個變量中。 直到這個數字= 1,你不能退出循環。 當數字變爲最後零時,您可以退出循環並繼續執行。
嗯,是什麼讓你覺得它異步執行?我很確定,代碼行CurrentDB.Execute在完成之前不會移動到下一行。您是否遇到以下代碼行中CurrentDB.TableDefs中表仍然存在的情況? – 2010-06-23 23:36:36
這是一個很好的觀點。其實,我認爲你是對的。在這種情況下,我正在檢查表名是否仍然存在,但在執行CurrentDb.Execute命令之前實例化的數據庫對象的「新建」副本中。 – 2010-06-24 04:13:22
如果您使用DBEngine(0)(0)查看錶是否仍然存在,那麼一個問題就是如此。在這種情況下,返回數據庫對象的調用不會刷新集合,因此在刪除之後,該表仍會顯示在列表中,除非在檢查之前刷新TableDefs集合。每次調用時,CurrentDB刷新所有集合,這是它比DBEngine(0)(0)慢得多的主要原因。 – 2010-06-24 21:16:42