gpt4 book ai didi

ms-access - 如何诊断MS Access 崩溃

转载 作者:行者123 更新时间:2023-12-02 22:05:11 25 4
gpt4 key购买 nike

我们有一个用Access编写的自定义程序,其中包含奇数崩溃。我们添加了错误处理功能,该功能可以记录并通过电子邮件发送在我们自己的代码内部发生的任何崩溃,并允许我们修复所生成的大多数错误,但是有时崩溃在我们的代码外部发生。

我们发现一个示例,该示例在2013年出现了新问题-我们有一个表单,该表单在某个字段中编辑数据后会崩溃-新条目很好,但创建记录后的任何编辑都会导致完全崩溃,关闭MS Access。我们花了一些时间,最终发现我们的某些代码迫使表格移至下一条记录,尽管此字段是行中的最后一个字段,所以Access本身也试图移至下一条记录。自2007年以来一直存在于系统中,但在2013年开始导致程序关闭。

有什么办法可以捕获和诊断MS Access内部程序级别的崩溃?
Windows事件查看器仅显示以下内容:

错误的应用程序名称:MSACCESS.EXE,版本:15.0.4454.1501,时间戳:0x50a35ef4
故障模块名称:MSACCESS.EXE,版本:15.0.4454.1501,时间戳:0x50a35ef4
异常代码:0xc0000005
故障偏移量:0x00116452
故障进程ID:0x1398
错误的应用程序开始时间:0x01ce6e665043d8be
错误的应用程序路径:C:\ Program Files(x86)\ Microsoft Office \ Office15 \ MSACCESS.EXE
错误的模块路径:C:\ Program Files(x86)\ Microsoft Office \ Office15 \ MSACCESS.EXE
报告ID:6cfcb0eb-da62-11e2-8966-842b2b86f028

最佳答案

这是一个旧线程,但它是Google上的最佳结果之一,所以我想我会给出答案。收到“访问遇到问题并且需要关闭”时,可以采取什么步骤。通常,在事件日志中,您会看到:

Faulting application name: MSACCESS.EXE, version: 15.0.4869.1000, time stamp: 0x57e12b41
Faulting module name: MSACCESS.EXE, version: 15.0.4869.1000, time stamp: 0x57e12b41
Exception code: 0xc0000005


这些可能会令人沮丧地进行故障排除。以下是我所采取的行动清单,从侵入性最小到侵入性最大。我不仅在发明这些修复程序-多年来,我亲眼目睹每种修复程序都可以解决问题。

反编译数据库

您指出这是反编译每个发行版的策略。好的政策-但是每当您收到错误消息后,都要明确执行此操作。原因是因为您可能正在解决核心问题,但没有注意到由于容器损坏而引起的注意。


我创建了一个快捷方式,该快捷方式通过“ / decompile”开关加载数据库。
双击此快捷方式时按住Shift键,则跳过任何自动运行,直接进入导航窗口。
加载数据库后,您将需要单击“压缩和修复”按钮。重新加载数据库时,再次按住shift键。
现在去编译代码并保存。这就是我用于反编译的过程。


测试计算机内存

特别是如果崩溃仅限于一台或两台计算机,请执行此操作。
检查事件查看器。是否有很多“错误”消息描述了应用程序崩溃,并且故障模块有所不同?如果是这样,则很有可能是不是Windows安装损坏,您正在查看内存问题。

我敢肯定有很多出色的内存测试仪,但是我鼓励您使用适当的测试来捕获丢失的位。 MemTest86是老歌,但又是好东西。有 current version和一些同样好的 forks

开始测试,并使其在工作时间内运行。我在建筑物中的电源故障导致内存错误,因此请保持变量不变。

从表单中删除二进制数据

有时,崩溃以单一形式或报告发生。如果它损坏了二进制数据,则崩溃应该发生在不同的计算机上,并且使用了不同的用户。如果是这种情况,请按照下列步骤操作。 (仅限高级用户)


在立即窗口中,将对象另存为文本。

Application.SaveAsText acForm,“ MyForm”,CurrentProject.Path和“ \ MyForm.txt”
重命名原始表单项(例如,重命名为MyForm_Bak)
在记事本中打开导出的文件
删除“ Checksum =“行(应在第3行)
清除二进制数据


浏览文件。
将有以“ Parameter = Begin”开头的行,并有编码二进制数据的行,以“ End”组成的行结束
找到这些行之一时,您将需要(包括)删除从开始到结尾的所有行。
您应该删除的参数是:NameMap,PrtMip,PrtDevMode,PrtDevNames,PrtDevModeW,PrtDevNamesW
所有这些块都应在表单控件定义之前出现

打开文件后,滚动浏览文件的其余部分,寻找任何引人注意的内容,尤其是在底部的VBA模块代码中。
保存文件
在Access的立即窗口中,将表单加载回

acForm的Application.LoadFromText acForm,“ MyForm”,CurrentProject.Path和“ \ MyForm.txt”
反编译/压缩修复/重新编译
打开表格,希望一切正常。


摆脱“ OLE对象”字段

如果在Access本身中存储有图像或其他数据,则应该找到一种更好的方法。存储OLE数据后,将根据存储它的计算机上的软件(和软件版本)将其存储。当另一台计算机在表单上显示该OLE对象数据,但没有安装确切的软件/版本时-您经常会崩溃。

如果要存储图像数据,则更好的方法是存储文件名,然后将图像保存到标准位置。较新版本的访问具有本机控件,可以通过这种方式进行操作。

重建整个数据库

这是很多工作,因此当您用尽所有其他选项时,我将保留此操作。仅当所有用户都遇到问题时,才需要这样做。如果不是所有用户都使用它,则它不是损坏的数据库。

与删除二进制数据的步骤相似,您将要从头开始重建数据库。当我到达这一步时,我已经处于全面偏执状态。也许这有点仪式性,但是我精心地做所有事情,没有捷径,也非常小心,不要通过直接复制或导入/导出来“保留”腐败。作为我的最后立场,我认为这从未解决过这个问题。幸运的是,自Access 2000以来,我就不必这样做了。


创建一个新的访问数据库容器。
不要使用导入/导出功能
表格:


对于旧访问容器中的每个表,在新容器中创建一个新表。从设计视图,复制/粘贴字段定义。
将旧数据导出为XML或CSV,然后从那里导入。

查询:


进入原始查询的SQL视图,将SQL文本复制并粘贴到新数据库的查询中。

表格/报告:


使用Application.SaveAsText函数导出表单/报告
从表单中剥离二进制数据并查看
使用Application.LoadFromText函数重新导入它们

巨集


重新创建宏。
在Access 2007及更高版本中,使用新的Macro系统,您只需打开Macro,全选(Control + A),然后粘贴到空白记事本文档中即可。从记事本再次复制并粘贴到新访问容器内的空白宏中

模组


选择所有代码(Control + A),然后将(Control + V)粘贴到新的数据库容器中

数据宏


由于数据宏已经问世,所以我不必这样做,但是您可以使用SaveAsText / LoadFromText函数从表中导出数据宏。



说完所有的事情-您应该有一个非常干净的数据库容器。

从测试中删除其他变量

网络腐败

不要从网络上加载客户端。将其放在本地驱动器上并从那里运行。

企业建设

如果您在使用“计算机内部版本”的公司环境中,并且在反编译,测试内存和剥离二进制数据方面均未成功,请拒绝进行进一步的测试,直到IT团队可以为用户提供具有以下功能的测试机为止:仅安装Windows,Office和Service Pack。我通常更喜欢自己进行安装,因此我可以相信。所有软件和更新应手动安装,而无需使用无人参与的安装。不要在此机器上安装防病毒软件。

我曾经让IT部门出于纯粹的F.U.D.和不合理-如果您遇到的是这种情况,请在“帮助我帮助您”的上下文中洗手。

电源不良

如内存部分所述-电源波动可能会导致计算机错误。如果数据库位于工业建筑物中,则请尝试使用提供整洁电源的电源调节器或UPS(使用电池,而不要使用通过金属氧化物压敏电阻的主电源)

另外,检查插入电源条或插座的电源电缆。确保规格和电压规格足够。我之所以这样说是因为IT部门经常将电源线插入工作站,而只是卸下机器。多年后,他们正在使用功能更强大的电源,但并未断开电缆。这有所作为。如有疑问,请携带新的粗电缆。

附录

自最初发布以来,我遇到了一些新问题。迁移到Access 2016时曾多次打扰我的是ODBC驱动程序。如果您的数据库在Access 2013下可以正常工作,但是在Access 2016中崩溃的确很可靠,则问题可能出在ODBC驱动程序。在跳数之外,尝试找出是否有更新的驱动程序。如果没有成功,则通过创建新数据库并在VBS中进行ODBC调用来确认它是否是ODBC驱动程序。如果您遇到相同的崩溃-其驱动程序。如果没有更新的驱动程序,则只需将其保留在2013年即可。我在具有少量数据库的PostGreSQL ODBC驱动程序中遇到了此问题。

关于ms-access - 如何诊断MS Access 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17279330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com