2009-08-14 113 views
2

我的應用程序(Vb.net,Access 2003/2007)將掃描Access數據庫文件以獲取activex控件並相應地生成報告。內存不足以繼續執行程序

問題:

獲得一個錯誤,如:

「內存不足,無法繼續執行程序。」

Dim oForm As Access.Form 
Dim oAccess as Access.Application 

oForm = oAccess.Forms(objForms.Name) 

但它打開:而之前的Office 2000

和代碼行,我得到這個是如下掃描像舊版本的Access文件時

上述錯誤文件和表單。

需要幫助:

是否有可能讀取該文件(訪問窗體和報表)或不?

請提供參考或任何解決方案。

+0

發生錯誤時,已打開多少個表單?一旦你完成了處理,你是否關閉了表格? – shahkalpesh 2009-08-15 03:32:09

回答

1

我以前見過的行爲非常類似於此。如果您嘗試在超過(我認爲)1Gb的RAM的計算機上打開它們,Access 97文件有時會報告「內存不足」錯誤。錯誤並不總是立即顯現出來 - 有時候,當你嘗試打開一個特別大的對象時,項目可能會正常運行,但會崩潰。

在我們遇到這種情況時,用戶在新的XP機器上運行舊的Access 97數據庫,他們已經升級到現代化的RAM。對公司的技術支持嘗試了他們所能想到的一切 - 包括完整的辦公室重新安裝,應用所有補丁程序等,但最終不得不求助於從計算機中刪除RAM - 於是錯誤消失,一切又變得穩固。我不確定究竟是什麼原因,但它將與Access 97文件格式的內存管理相關聯(我相信這個錯誤在MSDN某處,但我並沒有直接參與技術支持尋找解決方案 - 我想剛剛寫了許多年前的應用程序)

我建議你唯一的出路是使用一個特殊的,低內存的PC來運行應用程序。

+1

實際上,與Office 97的RAM的1 Gb問題將已解決Jet 3.51「內存不足」錯誤啓動Microsoft Access(97)http://support.microsoft.com/?kbid=161255。無論如何,Jet的穩定性是一個好主意。 – 2009-08-14 20:20:07

2

您似乎在執行COM的COM自動化以打開表單,然後遍歷其控件查找某些屬性。

另一種解決方案還涉及到自動化Access,但它不需要實際打開表單,這是未記錄的Application.SaveAsText命令。你會這樣做:

Application.Saveastext acForm, "dlgWebBrowser", _ 
    "C:\Output\dlgWebBrowser.txt" 

然後,你將不得不弄清楚如何在該文件中描述ActiveX控件。如果該文件看起來像VB表單的代碼,那是因爲這正是它的原因。

上面的例子有它的IE網絡瀏覽器的控制,以及OLE數據的轉儲後,它在它有這樣的:

OLEClass ="Microsoft Web Browser" 
    Class ="Shell.Explorer.2" 
    GUID = Begin 
    0x54c1ea41936d2046b9dc5b29905976e3 
    End 

我希望所有的ActiveX控件將有一個的OLEClass,但我非原生原則上避免使用ActiveX控件,因爲如果在嘗試運行應用程序時未正確安裝它們可能會導致問題。

事實上,這可能是問題的根源 - 如果您在沒有註冊相關ActiveX控件的計算機上打開Access窗體,將會失敗,並且表單無法打開。

我敢打賭,Application.SaveAsText會完全避開這個問題,因爲表單不必被打開。

相關問題