【问题标题】:Access crash when hitting breakpoints遇到断点时访问崩溃
【发布时间】:2014-01-23 07:40:38
【问题描述】:

我在 Access 2010 中有一个运行没有问题的项目。也就是说,直到我添加断点并尝试调试代码。一旦到达第一个断点,VBA 项目就会打开,大约 1 秒后 Access 崩溃并重新启动。 我可以添加一个 Debug.Print 并且一切正常。我就是无法单步执行代码。

修复和压缩不起作用,也没有创建新项目并导入所有内容。

查看我得到的事件查看器:

Faulting application name: MSACCESS.EXE, version: 14.0.4750.1000, time stamp: 0x4b8bae0f
Faulting module name: ntdll.dll, version: 6.2.9200.16579, time stamp: 0x51637f77
Exception code: 0xc0150010
Fault offset: 0x00000000001041c0
Faulting process id: 0x2ef4
Faulting application start time: 0x01cf180a44c35b8a
Faulting application path: C:\Program Files\Microsoft Office 2010\Office14\MSACCESS.EXE

我无法取消注册和重新注册 DLL(找不到入口点)。 我已经在http://pcsupport.about.com/od/fixtheproblem/a/ntdlldll.htm 上尝试了所有方法,但没有重新安装 Windows,但仍然没有。 在安全模式下运行 Access 确实有帮助,但不会永久修复它。

还有其他想法吗?

更新:我现在有一台新笔记本电脑并升级到 Access 365。它仍然会发生。但仅限于一个特定项目。其他项目运行良好。

【问题讨论】:

  • 你有没有备份、压缩、修复和反编译granite.ab.ca/access/decompile.htm?之后,如有必要,您可以将所有内容复制到新的数据库中。您是否也尝试过修复 MS Access?其他项目是否正常运行?
  • 您是否有加载项?
  • 是的,我确实有加载项,但他们正在处理其他 accdb 项目。所以是的,还有其他人正在工作。我已经压实并修复了。我也尝试在新数据库中复制所有内容 - 没有成功。现在将运行反编译。您如何修复 MS Access?
  • 确实,您需要通过将代码分成越来越小的块来进行隔离,直到找到问题为止。请注意,除非您以@CristianBuse 作为前缀,否则当您留言时我不会收到通知。我不需要这样做,因为这是您的问题,您会自动收到通知。您是在使用 64 位 Office 还是 32 位?有一些已知的 64 位错误,例如 this one
  • 您可以尝试here 的解决方案之一,从文本文件中导出和重建所有模块。与将所有对象导入新数据库相比,这可能(也可能不会)能够消除更多的“二进制损坏”。

标签: vba crash ms-access-2010 ntdll


【解决方案1】:

似乎这不是第一次发生这种类型的错误https://docs.microsoft.com/en-us/answers/questions/269052/vba-access-stop-command.html

上面的链接很详细(文字+截图),可能和你体验的差不多。

无论如何...请尝试使用run as administrator 选项打开您的access 软件(右键单击access 图标并选择此选项)。 vba 有可能尝试使用提升的权限,而没有它 - 它会导致严重的崩溃

【讨论】:

  • 谢谢。以管理员身份运行并不能解决它。是的,您提供的链接似乎与我的相同。可惜那里没有解决方案(在撰写本文时)。
  • 好吧..作者设法通过使用旧版本的产品“解决”了这个问题(如果我理解正确的话) - 我参考了这个线程上的最后一篇文章,最后一句写的。但是是的 - 不是一个解决方案
  • 2010和365我都试过了。
  • 如果您能够解决这个问题并在此处发布一个可靠的解决方案,那就太好了 - ms access 是我的第一个 db,当时我已经开始了自己的道路......大约 20 年以前......它有它自己的一系列问题。让我感到惊讶的是,它也给其他人带来了如此艰难的时光……难以置信
【解决方案2】:

我收到此错误并发现这是因为在使用从 advapi32.dll 库中声明的 GetUserName 函数时未将变量声明为正确的类型。在调用“GetUserName(buffer, Size)”之前,我必须将“Dim buffer As String”更改为“Dim buffer As String * 256”。这是代码:

#If VBA7 Then
Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" _
  Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
Private Declare Function GetUserName Lib "advapi32.dll" _
  Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If

Function getNetworkName() As String
    Dim ret As Long, Size As Long
    Dim buffer As String * 256
       
    Size = 256
    ret = GetUserName(buffer, Size)
    If ret <> 0 Then
        getNetworkName = Mid(buffer, 1, InStr(1, buffer, vbNullChar) - 1)
    Else
        getNetworkName = "API ERROR"
    End If
End Function

我不知道您的问题是否完全相同,但可能是由于这样的数据类型问题。

【讨论】:

    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多