如何跟踪 Access 崩溃

How can I track Access crashes

我被要求在几个数据库表单上添加一个新按钮。该按钮更改记录所在的队列,然后关闭窗体。没有什么花哨。我在三种不同的表单上有相同的按钮和相同的代码。在其中 2 个表格上,它的工作方式与我预期的一样。

该按钮在最后一个表单上每隔一段时间都可以正常工作,但在其他尝试中会导致 Access 崩溃。我试过添加错误日志记录,但它在记录任何内容之前崩溃了。我已经逐步完成了代码,它在下面的代码中的 rs.Edit 崩溃了...

按钮点击事件后面的表单代码:(每个表单在按钮后面都有这个)

Private Sub bRtD_Click()

  LogReturnToDashboard Me.Recordset

  DoCmd.Close acForm, Me.Name, acSaveNo

End Sub

调用的函数:(删除了错误处理程序,因为它无论如何都不会被触发,并保持已经很长的 post 更短)

Public Function LogReturnToDashboard(ByRef rs As DAO.Recordset)
Dim sSQL As String
Dim lLoc As Long

'Get Dashboard
  lLoc = GetDashboard(rs!Role)

  sSQL = "INSERT INTO tblActivity ( Vendor, FromLocation, OldStatus, ToLocation ) " & _
         "VALUES (" & rs!VID & ", " & rs!Location & ", " & rs!Status & ", " & lLoc & ");"
  CurrentDb.Execute (sSQL)

  rs.Edit    <-------- This is where it crashes
  rs!Location = lLoc
  rs.Update

End Function

SQL 命令执行,我可以检查tblActivity 并看到记录被更改回仪表板的行。

Google-fu 似乎 return ADODB 记录集导致 Access 崩溃的问题,但 DAO 却没有。

为什么它每隔一段时间就真的有效?我不知所措。当它一直崩溃时,我显然无法发布它。

我检查了 AppLog 并找到了这个条目,但这并没有告诉我太多信息。这似乎是 Office 套件的一般错误,因为 Google return 声明问题的页面是套件的每一部分。

有什么想法吗?只是更好地了解在哪里查看会很棒,我搜索了错误日志的每个部分,似乎没有什么特定于 Access。

更新: 到目前为止我有:
- 创建了一个新的数据库并导入了所有内容....重置引用...等等
- 创建了全新的表格并复制了所有内容。
- 反编译数据库
- 逐步浏览似乎比其他按钮更经常崩溃的按钮背后的代码......没有发现它们在相似的部分崩溃。 (除了这里原来的按钮,我现在还有其他导致 Access 崩溃的按钮...none 其他按钮在 rs.edit 顺便说一句)
- 下载了不同版本的 acedao.dll
- 发布在 MS 站点上希望得到更多答案...

到目前为止,我似乎仍然无法在防止这些崩溃方面取得任何进展。

由于您在 Access 数据库中以其他形式运行的代码遇到无法解释的崩溃,您的数据库中很可能有一个 "slightly" 损坏的表单。我建议尝试 decompile 数据库文件。

您可以从以下位置获得有关 /decompile 开关的更多信息:

How to Decompile a Database

Decompile Your Microsoft Access Database

我会制作数据库的备份副本,然后进行反编译,然后进行压缩。然后打开数据库并打开 VBA 编辑器并编译代码。然后测试一下。

/decompile 开关在过去为我解决了 Microsoft Access 数据库的许多奇怪问题。

关于您希望记录或跟踪有关崩溃原因的更多详细信息,很遗憾,我们无法做到这一点。 VBA 在 Microsoft Access 中无法拦截 Microsoft Access 可执行文件本身的错误或崩溃。

试试 /decompile

您没有要编辑的记录。 想想你的记录。

我终于找到了停止崩溃的方法!!

出于某种原因,Access 偶尔会在将记录集传递给模块时发出嘶嘶声。

它在数周内都运行良好(意味着按预期进行且没有崩溃)...然后突然开始崩溃。而且它也不会一直崩溃。一个按钮非常一致,因为它会工作一次,然后在下一次崩溃...然后在下一次工作,然后再崩溃。

我已经开始传递表单记录的 PK,然后在模块中创建一个按传递值过滤的记录集。从那时起,我就可以在没有崩溃的情况下工作了。

感谢大家提供的选项...我清楚地删除了一些不需要反编译并使用新数据库的垃圾 shell。