ACCESS崩溃,无故退出、备份、打开,严重时无法打开原文件,只能新建ACCESS文件再次导入

何尧 185 信誉分
2025-12-31T09:30:40.75+00:00

下面先我介绍一下自己的环境:

1.这是去年在联想官网新购的一台笔记本电脑,Intel(R) Core(TM) Ultra 9 185H (2.30 GHz),32.0 GB,64 位操作系统, 基于 x64 的处理器,Windows 11 专业版,操作系统版本:26100.7462。保持着最新更新。

2.我从微软官网下载一应需要,包括制作启动盘、Windows系统、MIicrosoft 365,并且网购激活码,在微软商城下载过微信、QQ、爱奇艺、酷狗音乐、百度网盘,另外在Itellyou网站下载了Visual studio 2022及Microsoft SQL 2008。现在只保留了MIicrosoft 365和搜狗五笔输入法,其它软件已经全部卸载。

3.ACCESS引用Visual basic for applications、microsoft access 16.0 object library、microsoft office16.0 access database engine object library、microsoft activex data objects 6.1 library、microsoft office16.0 object library和ole outomation,只使用下面几个API函数:

Public Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As Long) As Long

Public Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long

Public Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

Public Declare PtrSafe Function GetDeviceCaps Lib "Gdi32" (ByVal hDC As Long, ByVal index As Long) As Long

Public Declare PtrSafe Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As LongPtr

4.不只在一个ACCESS文件出现这种情况,在一个极其简单的ACCESS文件也发生,是否意味着它不是某个文件的内容导致,虽然我曾经以为一个模块的文本太长而拆分它。

目前我没有能力解决它,这一年一直忙于ACCESS程序编写,也不知道Office其它程序是否也会引起这种情况,或者根本不是Office的故障,但它困扰了我大半年。

通过win键+R运行打开事务查看器,看到Windows日志-应用程序里面每一天都有许多错误。不知道重装系统能否解决,而在重装系统之前,希望能解决它。

如何你能答复,请列出详尽的步骤,因为我不熟悉系统,即使上周刚买了本第5版《现代操作系统》。甚至不知它是否对症,但也是完成这个ACCESS程序以后才会去了解的后续事项。

下面分别贴出系统日志和应用程序日志的错误:

Microsoft 365 和 Office | Access | 家庭版 | Windows

1 个答案

排序依据: 非常有帮助
  1. Gabriel-N 16,475 信誉分 Microsoft 外部员工 审查方
    2025-12-31T13:39:12.9566667+00:00

    注:此回复已自动翻译。因此,它可能包含语法错误或表达尴尬。

    您好 VSofHeSheShen

    感谢您来到 Q&A 论坛提问,并分享了如此详细的环境信息、引用库设置以及事件查看器日志。这些细节非常有帮助。

    由于我无法拥有与您完全相同的环境(设备驱动、Windows 版本、Office 版本等),同时我也没有您的 Access 文件来进行直接复现,因此以下建议主要基于我的查阅资料与过往经验整理而成。

    您 VBA 代码中有一个非常可疑的点:在 64 位环境下,API 声明可能使用了不正确的数据类型(LongLongPtr)。在 64 位 Office 中,句柄/指针类参数应当使用 LongPtr。如果仍使用 Long,可能导致内存破坏,从而引起 Access 随机崩溃,甚至在多个数据库文件中都出现类似问题。您可以尝试将代码从 Long 修改为 LongPtr,例如:

    
    ' Win64 Compatible Declarations
    
    ' hWnd 和返回值必须是 LongPtr
    Public Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
    
    ' hWnd 和 hDC 都是句柄(指针)-> LongPtr;返回值是 Long
    Public Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As LongPtr, ByVal hDC As LongPtr) As Long
    
    ' nIndex 只是整数,这里用 Long 没问题;返回值是 Long
    Public Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    
    ' hDC 是句柄 -> LongPtr
    Public Declare PtrSafe Function GetDeviceCaps Lib "Gdi32" (ByVal hDC As LongPtr, ByVal index As Long) As Long
    
    ' saArray 暗示指向数组结构的指针 -> 我这里保持您原来的写法,
    ' 但很多情况下如果能用 UBound(),就不需要调用 SafeArrayGetDim
    Public Declare PtrSafe Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
     
    
    

    此外,在执行任何修复操作之前,请先保护您的文件。方法是将 Access 文件复制到另一个本地位置并重命名,例如:Copy_您的文件名.accdb(这样,即使操作失败,原始文件也不会丢失)。

    您还可以尝试修复 Microsoft 365:在控制面板中搜索 > 卸载程序 > 右键单击 Microsoft 365 > 更改。选择“快速修复”,如果问题仍然存在,请选择“联机修复”。

    为了减少加载项的干扰并隔离问题,请尝试在安全模式下打开 Access 并修复复制的文件:按 Win + R >  输入 msaccess /safe

    • 打开数据库(请打开复制/重命名后的那个文件)
    • 在 Access 功能区:文件信息压缩并修复数据库(Compact and Repair Database)
    • 如果成功,Access 通常会生成一个修复后的文件(可能在原路径、但名称会变化)。请打开它并检查数据是否完整。

    如果在界面里“压缩并修复”失败,可以尝试命令行方式:

    • Win + R > 输入 cmd > 回车
    • 运行以下命令(请用您的实际路径替换):"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" "Your file path.accdb" /compact
    • 回车执行并等待完成;如果成功,请打开修复后的数据库并验证数据。

     如果修复仍然失败,建议尝试将对象导入到一个新数据库中(即使原文件损坏,很多时候也能通过这种方式抢救出内容):

    • 打开 Microsoft Access(启动后先不要打开任何文件)
    • 点击 文件新建空白桌面数据库
    • 创建一个新文件,例如 NewBackup.accdb,保存到桌面或本地目录
    • 在新数据库中:外部数据新建数据源从数据库Access
    • 在“导入对象”窗口,选择: “将表、查询、窗体、报表、宏和模块导入到当前数据库”
    • 点击 浏览 选择您损坏文件的“复制件”
    • 点击 确定 如果 Access 能读取文件,会列出对象;请选择需要的对象(或全选)然后点击 导入
    • 如果只能部分导入成功,请优先检查表数据(最重要),然后把新文件保存为备份。

    如果在导入过程中仍然崩溃,您可以尝试使用 /decompile 清理编译缓存,然后再尝试修复或导入:"C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE" "Your file path.accdb" /decompile

    关于您提到的 Windows 错误:很抱歉这一部分超出我的能力范围,不过您可以尝试一些基础的系统修复步骤:

    • Win + R,输入 services.msc 并回车
    • 找到 Windows Update → 右键 → 停止
    • 以管理员身份打开命令提示符(右键开始菜单 → 命令提示符/终端(管理员))
    • 依次执行以下命令:

    sfc /scannow

    DISM /Online /Cleanup-Image /RestoreHealth

    另外,我注意到一条可能比较关键的错误:

    • 事件 ID 11(Disk - Controller Error)(日期:2025/12/7) “驱动程序在 \Device\Harddisk1\DR6 上检测到控制器错误。”

    由于存储/控制器相关错误可能导致文件损坏并引发应用程序不可预测的崩溃,我建议您考虑联系购买设备的商家/卖家(或联想官方支持)进一步检查该磁盘/控制器错误(SSD 健康、控制器/固件、驱动等)。

    希望这些信息能对您有所帮助。请您尝试以上建议并告诉我结果(尤其是把 Long 改为 LongPtr 后崩溃是否减少,以及“压缩修复”或“导入对象”是否成功)。如果这仍然不能反映你的情况,请在评论区告诉我。


    注意:如果您希望收到此线程的相关电子邮件通知,请按照我们的文档中的步骤启用电子邮件通知功能


你的答案

提问者可以将答案标记为“已接受”,审查方可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。