ACC2002:在大數(shù)據(jù)庫中保存對象比在早期版本中慢View products that this article applies to.
中級用戶:要求具備基本宏、編碼和互操作技能。 本文適用于 Microsoft Access 數(shù)據(jù)庫 (.mdb) 和 Microsoft Access 項(xiàng)目 (.adp)。 有關(guān)本文的 Microsoft Access 2000 版本,請參見 246306。
癥狀當(dāng)您嘗試保存對 Microsoft Access 對象所作的設(shè)計(jì)更改,而這些對象包含模塊(窗體、報(bào)表、或標(biāo)準(zhǔn)模塊)時(shí),保存對象可能比在 Microsoft Access 95 或 97 中花的時(shí)間更長。特別是在包含大的 Visual Basic for Application (VBA) 項(xiàng)目的數(shù)據(jù)庫中尤其如此。
更多信息位于 Microsoft Access 內(nèi)部的 Visual Basic 環(huán)境 (VBE) 指示 Access 如何在數(shù)據(jù)庫內(nèi)存儲 VBA 項(xiàng)目。VBA 項(xiàng)目是標(biāo)準(zhǔn)和類模塊(包括窗體和報(bào)表模塊)、庫引用,以及存儲在 Microsoft Access 數(shù)據(jù)庫 (MDB) 或項(xiàng)目 (ADP) 文件中的其他屬性的集合。 VBE 要求所有宿主應(yīng)用程序一次讀取和寫入整個(gè) VBA 項(xiàng)目。由于 VBE 集成在 Access 2000 中,Access 保存模式遵循這一要求。在保存時(shí),保存整個(gè) VBA 項(xiàng)目,而不只是保存單個(gè) 臟 模塊。這意味著,如果數(shù)據(jù)庫含有大的 VBA 項(xiàng)目,將花比較長的時(shí)間進(jìn)行保存,因?yàn)橐貙懻麄(gè)項(xiàng)目,而不只是您修改過的單個(gè)對象。這一模式與 Microsoft Access 95 和 97 中使用的保存模式不同。在那些版本中,VBA 項(xiàng)目中的項(xiàng)作為系統(tǒng)表內(nèi)的單個(gè)行存儲,且在保存時(shí) Access 分別地保存每個(gè) 臟 對象,然后將那些更改合并回?cái)?shù)據(jù)庫的 VBA 項(xiàng)目中。 當(dāng)保存 VBA 項(xiàng)目時(shí),有兩種表示法。有規(guī)范表示法或文字表示法,以及編譯表示法。VBA 項(xiàng)目的規(guī)范部分代表您在 VBE 內(nèi)部的模塊中看到的文本代碼。項(xiàng)目的編譯部分是當(dāng)用戶編譯和保存項(xiàng)目時(shí)該代碼的二進(jìn)制存儲。例如,在 Access MDB 和 ADP 文件中,項(xiàng)目的兩個(gè)部分都存儲在文件內(nèi)部,而在 MDE 和 ADE 文件中,項(xiàng)目的規(guī)范部分被刪除,只有編譯部分存儲在文件內(nèi)部。 Microsoft Access 2002 保存模式比 Access 2000 保存模式有所改進(jìn)。在 Access 2000 中,如果對模塊進(jìn)行編輯,并加以保存,項(xiàng)目的規(guī)范部分和編譯部分都寫入文件中,即使您不編譯該項(xiàng)目。在 Access 2002 中,如果您不編譯項(xiàng)目,則當(dāng)保存時(shí),只有規(guī)范部分寫回,這樣就使保存時(shí)間比 Access 2000 短。如果您編譯項(xiàng)目并保存,項(xiàng)目的規(guī)范部分和編譯部分都保存到文件中。 例如,假設(shè) Access 文件內(nèi)的 VBA 項(xiàng)目的大小是 10 兆字節(jié) (MB),您對一個(gè) 100 千字節(jié) (KB) 的模塊作了一行代碼更改。在保存期間,Microsoft Access 95 和 97 只需將那個(gè)模塊寫回,意思是,需要將 100 KB 的數(shù)據(jù)寫回該文件。在 Microsoft Access 2000 中,相同的操作將迫使將整個(gè) 10 MB VBA 項(xiàng)目重新寫入該文件。在 Microsoft Access 2002 中,相同的操作將只把一個(gè)模塊寫回到該文件,除非您首先編譯了該項(xiàng)目,這樣做將迫使將整個(gè)項(xiàng)目重新寫入。 除了其他 Visual Basic 環(huán)境宿主應(yīng)用程序提供的一致性外,這種項(xiàng)目存儲模式還有其他優(yōu)勢:
- 消除了對 Microsoft Jet 數(shù)據(jù)庫引擎的依賴。
- 改善了 Access 特定對象的穩(wěn)定性。
消除了對 Microsoft Jet 數(shù)據(jù)庫引擎的依賴。 在 Microsoft Access 2002 中,可以創(chuàng)建 Microsoft Access 項(xiàng)目文件 (.adp) 以及 Microsoft Jet 數(shù)據(jù)庫文件 (.mdb)。通過使用 Access 項(xiàng)目文件,可以將 Microsoft SQL Server 用作 Microsoft Jet 的備用數(shù)據(jù)庫引擎。在 Access 2000 之前,所有 Access 特定的對象(窗體、報(bào)表、宏、模塊和命令欄)都依靠 Microsoft Jet 數(shù)據(jù)庫引擎進(jìn)行存儲。這些對象過去存儲在 Microsoft Jet 數(shù)據(jù)庫內(nèi) Access 特定的系統(tǒng)表中。由于 Microsoft Access 2002 可以使用 Microsoft SQL Server 作為 Microsoft Jet 備用引擎,因此,Microsoft 為 Access 特定的對象開發(fā)了一種存儲機(jī)制,該機(jī)制不依賴于 Microsoft Jet。
改善了 Access 特定對象的穩(wěn)定性 Access 2002 中的項(xiàng)目存儲模式改善了 Access 特定對象和 Visual Basic 項(xiàng)目的穩(wěn)定性。Visual Basic for Applications 從來沒有在不對源代碼進(jìn)行控制的情況下允許對 Visual Basic 項(xiàng)目進(jìn)行多用戶編輯。 Microsoft Access 95 和 97 能夠?qū)?Visual Basic for Applications 隱藏在多用戶環(huán)境中對項(xiàng)目進(jìn)行的更改,并在以后將它們合并到項(xiàng)目中,從而避開這一限制。但是,這樣做會對 Visual Basic 項(xiàng)目的穩(wěn)定性造成負(fù)面影響。當(dāng)用戶修改 Access 特定對象的設(shè)計(jì)時(shí),Access 2002 要求獨(dú)占鎖定,才能確保該項(xiàng)目只有一個(gè)編輯者。
參考有關(guān) Microsoft Access 2002 中的項(xiàng)目存儲更改的其他信息,請單擊以下文章編號,查看相應(yīng)的 Microsoft Knowledge Base 文章:
283228 ACC2002: Exclusive Lock Required for Saving Design Changes to Access Objects
最近更新: |
2003-11-12 (2.0) |
關(guān)鍵字: |
kbdta kbprb KB287603 |
|