2010-10-21 27 views
1

在Access 2003 Pro(build 11.8321.8324)SP3上測試。這是什麼Access的錯誤?您目前沒有對數據庫的獨佔訪問

重現步驟:

  • 創建一個新的數據庫。
  • 創建一個新窗體。
  • 在窗體上放一個按鈕。
  • 粘貼按鈕的Click事件過程中的以下代碼:

Debug.Print Workspaces.Count
Debug.Print CurrentDb.Name

  • 關閉代碼編輯器和形式,保存更改。
  • 不要跳過這一步:關閉Access。
  • 重新打開Access和你的數據庫。
  • 打開窗體
  • 點擊按鈕
  • 單擊工具欄按鈕來切換表單設計模式。

您應該看到下面的錯誤對話框:

您不必在這個時候獨佔訪問數據庫。如果您繼續進行更改,您可能無法在以後保存它們。

Access error dialog

有誰知道這是怎麼回事?

+0

關閉後,鎖文件(.ldb)仍然存在,即不會自動刪除? – awrigley 2010-10-21 08:46:13

+0

@awrigley:不,它被刪除了。 – 2010-10-21 09:08:19

+0

計算工作區時必定存在一些問題,出於某種原因,它可能認爲不同的項目已經訪問/打開它。但我猜測,我真的沒有線索。我會聯繫MS。 – awrigley 2010-10-21 09:59:49

回答

0

簡單的解決方法是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中的實例。

當然,這都是猜測,我很好奇,因爲你知道「真正的答案」。

+0

我實際上找到了解決方法,但它並沒有讓我更接近理解正在發生的事情。 (也沒有閱讀幫助!)我認爲另一種解決方法是永遠不會引用「工作區」集合。 – 2010-10-21 21:58:33

+0

這沒有任何意義。如果您在用戶界面中打開了一個數據庫,則該工作區已經創建。 – 2010-10-22 00:40:04

+0

我同意這是沒有意義的。但它是最好的(儘管公認很弱)的解釋,我可以想出爲什麼轉換陳述的順序來解決問題。 – mwolfe02 2010-10-22 13:11:27

相關問題