【问题标题】:ACCESS 2010 System Resource ExceededACCESS 2010 系统资源超出
【发布时间】:2013-11-02 05:48:00
【问题描述】:

我的团队正在使用 access 2000,我们在那里有我们的 MDB 项目。这个应用程序(ERP)可以打开大约 20 个访问表单。在我们决定将整个系统迁移到 Access 2010 到它的新格式 *.accdb 之后;我们现在遇到了内存减少的问题,现在大约 100mb。

是否有任何解决方法,我可以遵循的任何路径来增加我的访问 2010 项目内存限制。

问题的流程:我们将登录名和密码放在初始表单中,然后开始打开表单(访问表单中的表单,字面意思)。当大约10个表单时,access 2010使用的内存达到107mb,当我们打开下一个表单时,系统崩溃并出现以下错误:“3035描述系统资源超出”

【问题讨论】:

  • 也许您可以考虑重新设计应用程序,使其不需要一次打开这么多表单。您还确定停止打开“另一种形式”实际上会使应用程序运行。可能您已经打开的表单之一正在占用内存。
  • 应用程序很复杂,我们不能限制表单的数量,因为客户不想要。我们已经运行了这个“另一种形式”测试大约一百次。你是对的,一个打开的表单使用连接内存,哪里会出现内存限制问题。
  • 我们正在返回访问 2000,我们无法解决问题。
  • @DiegoGarciaVieira:你解决过这个问题吗?还是您仍在使用 Access 2000?

标签: forms ms-access vba ms-access-2010


【解决方案1】:

此问题是由 32 位访问超过 32 位 Windows 虚拟内存限制(每个应用程序 2GB)引起的。我不知道为什么这个问题在 Windows XP 上没有出现(没有时间测试它)。

您可以通过性能监视器或访问应用程序中的代码跟踪 VM 使用情况。您会看到,随着表单的打开,VM 使用率逐渐上升,直到访问中断。

解决办法是在windows 64bit上切换到Access 64bit。请记住,如果您有外部 dll 调用,则需要将它们重写为 64 位。 ActiveX 控件也需要是 64 位的。


跟踪虚拟机的代码

Declare PtrSafe Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

Public Type MEMORYSTATUS
   dwLength As Long
   dwMemoryLoad As Long
   dwTotalPhys As Long
   dwAvailPhys As Long
   dwTotalPageFile As Long
   dwAvailPageFile As Long
   dwTotalVirtual As Long
   dwAvailVirtual As Long
End Type

Function ReturnVirtualMemory() As Long

    Dim Mem as MEMORYSTATUS

    Mem.dwLength = Len(Mem)
    GlobalMemoryStatus Mem

    ReturnVirtualMemory = Mem.dwTotalVirtual - Mem.dwAvailVirtual
End Function

【讨论】:

  • 这确实是一个解决方案,但我们不会使用它,因为我们无法改变用户体验来修复我们的局限性。无论如何,谢谢。
【解决方案2】:

这可能对我有所帮助: 在所有驱动器上激活系统管理的分页。 为此,

  1. 右键单击“我的电脑”图标并选择“属性”,
  2. 转到“高级系统设置”>高级>设置>高级>更改,
  3. 取消选中“自动管理分页...”并一一选择所有驱动器并为每个驱动器设置“系统管理大小”。
  4. 按 [OK] 即可完成。

Example Screenshot

【讨论】:

  • 这很好用,过去一周我一直在不停地寻找,但找不到解决方案。感谢您花时间在此处输入您的想法。
【解决方案3】:

基于 Mint 提供的 VM 跟踪代码,我为我的应用程序制作了一种“早期警告”系统,当 VM 接近将开始导致问题的点时会向您发出警告并建议重新启动.这有点烦人,但在有人想出一个更好的解决方案来解决在 64 位操作系统环境中运行的 32 位 Office 之前,它必须这样做。

ReturnVM:返回以 GB 为单位的虚拟内存使用情况,如果超过 1.425GB,则触发警报。我发现这适用于我的应用程序,在重新启动之间给予尽可能多的时间,同时仍然允许在重新启动之前完成工作。根据需要随意调整。

os_Restart: 编写一个批处理文件来杀死活动的 Access 进程,删除剩余的 laccdb 文件并重新启动应用程序(假设一切都在用户的桌面上)。写入文件后,它执行批处理。另一个函数在应用程序启动时删除此文件。

TempVars!tv_WinUID = Environ("USERNAME")

Function ReturnVM() As Double

    Dim Mem As MEMORYSTATUS
    Dim Result As Integer

    Mem.dwLength = Len(Mem)
    GlobalMemoryStatus Mem

    ReturnVM = Format((Mem.dwTotalVirtual - Mem.dwAvailVirtual) / 1073741824, "0.000")

    Debug.Print ReturnVM & " GB of VM used."

    If (ReturnVM >= 1.425) Then
      DoEvents
      Result = MsgBox("Office Virtual Memory usage is approaching the pre-set limit." & vbCrLf & vbCrLf & "To prevent a possible crash, please click 'OK' to restart immediately." & vbCrLf & vbCrLf & "You may click 'Cancel' to finish what you're working on, but if you do, please restart the application as soon as possible.", vbOKCancel)
      If (Result = vbOK) Then
        os_Restart
      End If
    End If

End Function

Public Function os_Restart()

    Dim fso As Object
    Dim oFile As Object
    Dim BatchContents As String

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set oFile = fso.CreateTextFile("C:\Users\" & TempVars!tv_WinUID & "\Desktop\RestartAccess.bat")

    BatchContents = "@echo Restarting Application..." & vbCrLf & _
                    "@echo off" & vbCrLf & _
                    "taskkill /f /im MSACCESS.EXE" & vbCrLf & _
                    "ping -n 6 127.0.0.1 > nul" & vbCrLf & _
                    "del " & Chr(34) & "C:\Users\" & TempVars!tv_WinUID & "\Desktop\Application.laccdb" & Chr(34) & vbCrLf & _
                    "start " & Chr(34) & Chr(34) & " " & Chr(34) & "C:\Users\" & TempVars!tv_WinUID & "\Desktop\Application.accdb" & Chr(34)

    DoEvents
    'Debug.Print BatchContents
    oFile.WriteLine BatchContents
    oFile.Close
    Set fso = Nothing
    Set oFile = Nothing

    Call Shell("C:\users\" & TempVars!tv_WinUID & "\Desktop\RestartAccess.bat")

End Function

【讨论】:

  • 非常好的方法。
【解决方案4】:

经过几个月的挫折,我在 Access 2010 和 Access 2013 中都找到了原因和解决方案。在运行程序时在后台加载 Skype 会导致在大型查询和紧凑型查询中出现“系统资源超出错误”和修理。

如果在 windows xp 兼容模式下运行仍有问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多