簡單的解決方法是CurrentDb打電話叫工作區首次之前:
Debug.Print CurrentDb.Name
Debug.Print Workspaces.Count
Debug.Print CurrentDb.Name
我要在釐清這是怎麼回事了一槍,但是這僅僅是我的理論。
訪問幫助文件中的相關內容如下(爲CurrentDb):
注意在 的Microsoft Access以前的版本中,您可能已經使用 語法 DBEngine.Workspaces(0 ).Databases(0)或 DBEngine(0)(0)返回指向當前數據庫的 。在Microsoft Access 2000中,您應該使用CurrentDb方法代替 。 CurrentDb方法創建另一個當前數據庫的 實例,而DBEngine(0)(0)語法將 引用到當前數據庫的打開副本。 CurrentDb方法使您能夠創建 數據庫類型的多個變量 ,該數據庫指向當前數據庫的 。 Microsoft Access 仍支持DBEngine(0)(0) 語法,但您應該考慮對 中的代碼進行此修改,以避免 多用戶數據庫中可能發生的衝突。
而對於工作區集合:
當你第一次參考或使用 Workspace對象,你自動 創建默認工作區, DBEngine.Workspaces(0)。
看起來,通過在第一次調用CurrentDb之前創建默認工作區,您會以某種方式導致CurrentDb忘記它應該如何工作。看起來,不是創建當前數據庫的新實例,而是使用已經存在於默認Workspace中的實例。
當然,這都是猜測,我很好奇,因爲你知道「真正的答案」。
關閉後,鎖文件(.ldb)仍然存在,即不會自動刪除? – awrigley 2010-10-21 08:46:13
@awrigley:不,它被刪除了。 – 2010-10-21 09:08:19
計算工作區時必定存在一些問題,出於某種原因,它可能認爲不同的項目已經訪問/打開它。但我猜測,我真的沒有線索。我會聯繫MS。 – awrigley 2010-10-21 09:59:49