2011-10-14 85 views
3

歷史記錄:我繼承了一個使用MS Access編寫的大型應用程序,其中包含大量表單,查詢和報表。因爲它看起來像是作爲備份方式複製的這些項目中的一部分,所以我不知道它們是否在任何地方實際使用。MS Access 2007:查找使用表單/查詢/報表的地方

問題:我開始清理應用程序的過程,需要一種方法來查找是否以及在何處使用表單,報告或查詢,以便我知道是否可以刪除或重構它們。有沒有一種很好的方法可以搜索窗體/報告名稱的按鈕事件?

(訪問查找功能似乎只找到記錄,除非我失去了一個環境)


編輯 - 解決方案:正如在回答和下面的評論中提及

1) ,通過創建一個全新的Access文件,然後以表單的形式,從登錄屏幕開始,並查看缺少的內容來重建應用程序將是一個寶貴的教訓。這將提供對整個應用程序的深入瞭解。

2.)我發現this post討論了使用「數據庫文檔管理器」來轉儲與給定表單中使用的對象,VBA等有關的所有信息。生成的文本文件很容易通過單個特定的查詢,報告或表單進行搜索。它不會爲我提供與重新構建整個應用程序相同的知識水平,但它是有針對性的知識/可能的清理的一個很好的權宜之計。

回答

2

假設你有一個名爲frmOne形式有一個命令按鈕的代碼隱藏爲:

DoCmd.OpenReport "rptFoo" 

而且rptFoo使用qryFoo作爲其記錄源。

啓用跟蹤名稱自動更正,然後查看frmOne的對象依賴關係不會通知您,frmOne需要rptFoo。它可以告訴你qryFoo是rptFoo所必需的。另一個問題是對象依賴不會通知您frmOne已被棄用---當前版本是frmTwo。

同樣,使用Application.SaveAsText爲數據庫對象創建文本文件,然後grepping文本文件不會告訴您frmOne已被棄用。

您可以嘗試不同的方法來識別哪些數據庫對象是必需的。創建一個新的數據庫文件。從舊數據庫導入啓動窗體。打開新的數據庫和表單以識別它需要的缺失項目。導入這些。泡沫,沖洗,重複。

如果應用程序不是從啓動表單驅動的,請向用戶詢問他們使用的表單和報告,然後導入這些表單。

這種方法將是單調乏味的,可能需要幾個小時。但是,我懷疑其他方法會快得多。另外一方面,你幾乎可以保證你不會將不需要的對象導入到新的數據庫中。如果你錯過了任何需要的東西,你可以從舊數據庫的保存副本中導入。

+1

有沒有簡單的方法來確定新的數據庫文件需要rptFoo?您似乎需要運行每個報告才能找到缺失的報告。當然,這對於繼承的應用程序可能是一個有價值的練習。 – chip

+1

這可能取決於應用程序的組織方式。如果用戶僅從數據庫窗口(Access <= 2003)或導航面板(Access> = 2007)打開rptFoo,則無法通過檢查數據庫屬性或代碼來確定它是否是必需的。如果所有的用戶操作都是從配電盤菜單表單驅動的,那麼你可以檢查代碼/宏/配電盤表來找出哪些數據庫對象是必需的。不過,我認爲你的第二點更重要。在重構任何東西之前,他應該首先檢查用戶。避免重構不需要的零件... – HansUp

+0

了。避免清理代碼,以便更好地執行操作,以便發現必須根據當前需求更改操作。在對其進行任何更改之前,理解繼承的應用程序是無可替代的。詢問用戶。 – HansUp

0

這可能是一個使用軌道名稱自動更正的情況下,與此打開你可以跟蹤對象的依賴關係。

使用VBA檢查表單引用的代碼和事件絕非不可能。

+0

感謝Track Name Autocorrect建議。你是對的,在VBA檢查很容易。尋找附在按鈕上的表單/報告更多的是我所關心的。我會看看軌道名稱自動更正。 –

+0

@泰勒我也意味着'對於每個frm在Currentproject.AllForms ...對於每個Ctl在Forms(frm.Name).Controls ...'等等。很少有一點VBA應該這樣做。 – Fionnuala

0

我繼承了一個具有20多個mdb前端的應用程序,其中一些應用程序使用其他文件中的查詢。除了Remou提到的解決方案之外,我還使用此script的變體將所有表單,查詢和報告導出到文本文件,然後grep通過它們檢查對象是否被使用。

這並不完美,但它也允許我檢查mdbs之間的依賴關係 - 我不確定是否可以使用內置工具來執行此操作。當我編寫它時,我可能已經患上了NIH。

您可能還想看看mz-tools,它有一些工具可以找到未使用的代碼。

+0

感謝您的研究項目。我會看看這些。 –

0

這個小插件,免費和有用的vtools,除其他可能性之外,它特別允許您在所有訪問對象(表,查詢,代碼,表單,...)中搜索值或引用。

+0

感謝vtools的建議。我會看看他們。它們聽起來很有用。 我可能會用解決方案@HansUp建議只是爲了瞭解在這個特定的應用程序中發生了什麼。 –

0

它很容易。

進入VBA代碼編輯器(找到查看代碼的地方) CTRL + F拉起查找選項,並單擊搜索項目

所以,如果你去通過表單和報表名稱,你就可以找到他們已經被編程式引用的每一次。這將無法查找是否使用查詢,因爲您需要數據庫文檔管理器。