我的应用程序(Vb.net,Access 2003/2007)是扫描Access数据库文件中的activex控件并相应地生成报告。
问题:
收到如下错误:
“内存不足,无法继续执行程序。”
扫描Office 2000之前的旧版Access文件时出现上述错误。
我得到的代码行如下:
Dim oForm As Access.Form
Dim oAccess as Access.Application
oForm = oAccess.Forms(objForms.Name)
但它也会打开文件和表单。
需要帮助:
是否可以读取文件(访问表单和报告)?
请提供参考或任何解决方案。
答案 0 :(得分:2)
您似乎正在执行Access的COM自动化以打开表单,然后在其控件中循环查找某些属性。
另一个解决方案还涉及自动化Access,但它不需要实际打开表单,这是未记录的Application.SaveAsText命令。你会做这样的事情:
Application.Saveastext acForm, "dlgWebBrowser", _
"C:\Output\dlgWebBrowser.txt"
然后,您必须弄清楚该文件中如何描述ActiveX控件。如果该文件看起来像VB表单的代码,那是因为它正是它的本质。
上面的示例上有一个IE Web浏览器控件,在转储OLE数据之后,它就有了这个:
OLEClass ="Microsoft Web Browser"
Class ="Shell.Explorer.2"
GUID = Begin
0x54c1ea41936d2046b9dc5b29905976e3
End
我希望所有ActiveX控件都有一个OLEClass,但我原则上避免使用ActiveX控件,因为如果在您尝试运行应用程序时未正确安装它们可能会导致问题。
事实上,这可能是问题的根源 - 如果您在没有注册相关ActiveX控件的计算机上打开Access表单,它将失败,并且表单将无法打开。< / p>
我敢打赌,Application.SaveAsText将完全回避这个问题,因为不需要打开表单。
答案 1 :(得分:1)
我之前看到的行为与此非常相似。如果您尝试在具有超过(我认为)1Gb RAM的计算机上打开它们,Access 97文件有时会报告“内存不足”错误。错误并不总是立即显现出来 - 有时项目可能看起来正常运行但在尝试打开特别大的对象时崩溃。
在我们遇到这种情况的情况下,用户在新的XP机器上运行旧的Access 97数据库,他们已经升级到现代数量的RAM。对该公司的技术支持尝试了他们能想到的一切 - 包括完整的办公室重新安装,应用所有补丁等但最终不得不求助于从计算机中移除RAM - 于是错误消失了,一切都再次坚如磐石。我不确定确切的原因,但它将与Access 97文件格式的内存管理相关联(我相信错误是在某个地方的MSDN,但我没有直接参与技术支持寻求解决方案 - 我只是多年前写的应用程序)
我建议你唯一的出路就是使用特殊的低内存PC运行应用程序。