我被要求在几个数据库表单上添加一个新按钮。该按钮更改记录所在的队列,然后关闭表单。没有什么花哨。我有三个不同形式的相同代码的相同按钮。在其中的两种形式中,它的运作方式与我期望的一样。
该按钮在最后一个表单上每隔一段时间都可以正常工作,并在其他尝试时崩溃Access。我尝试添加错误日志记录,但在记录任何内容之前崩溃。我已逐步完成代码,并在以下代码rs.Edit
处崩溃...
按钮点击事件背后的表单上的代码:(每个表单都在按钮后面)
Private Sub bRtD_Click()
LogReturnToDashboard Me.Recordset
DoCmd.Close acForm, Me.Name, acSaveNo
End Sub
调用函数:(错误处理程序被删除,因为它无论如何都没有被触发,并且保持已经很长的帖子更短)
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似乎会返回ADODB记录集导致Access崩溃的问题,而不是DAO。
为什么它每隔一段时间才会真正起作用?我不知所措。当它一直崩溃时,我显然无法发布这个。
我检查了AppLog并找到了这个条目,但这并没有告诉我多少。这似乎是Office套件的一般错误,因为Google返回的页面声明问题是套件的每个部分。
有什么想法吗?只是更好地了解哪里看起来会很棒,我已经搜索了错误日志的每一部分,似乎没有任何特定的Access。
更新
到目前为止我有:
- 创建一个新数据库并导入所有内容....重置引用...等
- 创建全新的表格并复制所有内容
- 反编译DB
- 逐步通过按钮后面的代码,似乎比其他人更频繁地崩溃...没有发现它们在类似的部件中崩溃。 (我现在有其他按钮导致除了原来的那个之外的Access崩溃...其他人都没有在rs.edit
btw崩溃)
- 下载了不同版本的acedao.dll
- 发布在MS网站上希望得到更多答案......
到目前为止,我似乎无法在防止这些崩溃方面取得任何进展。
答案 0 :(得分:2)
由于您遇到无法解释的崩溃,其代码在Access数据库中以其他形式运行,因此您的数据库中很可能会出现“轻微”损坏的形式。我建议尝试decompile
数据库文件。
您可以从以下网址获取有关/decompile
切换的更多信息:
Decompile Your Microsoft Access Database
我会制作数据库的备份副本,然后做一个反编译,然后是一个紧凑的。然后打开数据库并打开VBA编辑器并编译代码。然后测试一下。
/decompile
开关在过去为我修复了Microsoft Access数据库的许多奇怪问题。
关于您想要记录或跟踪有关崩溃原因的更多详细信息,遗憾的是没有办法这样做。 Microsoft Access中的VBA无法拦截Microsoft Access可执行文件本身中的错误或崩溃。
尝试/decompile
。
答案 1 :(得分:0)
您没有要编辑的记录。 想想你现在的记录。
答案 2 :(得分:0)
我终于想出了如何阻止崩溃!!
出于某种原因,Access偶尔会将记录集传递给模块。
它工作正常(意思是预期而且没有崩溃)数周......然后突然开始崩溃。它也没有一直崩溃。一个按钮是非常一致的,因为它可以工作一次,然后崩溃下一个...然后下一次工作,并在那之后崩溃。
我已经开始为表单的记录传递PK,然后在模块中创建一个由传递的值过滤的记录集。从那以后,我一直没有崩溃。
感谢选项人员...我明确地减少了一些不需要被反编译包含并使用新数据库shell的垃圾。