重建整个数据库
这是很多工作,所以在用完所有其他选项之后这是最后的手段。如果在不同的计算机上针对不同的用户发生问题,则只需执行此操作。如果没有为所有用户发生,那么很可能它不是一个损坏的数据库容器。
与删除二进制数据的步骤类似,你将从头开始重建数据库。这个过程有点仪式化,但如果小心翼翼地小心谨慎,不要保留任何可能的腐败,那么这个过程就非常有效。
创建一个新的访问数据库容器
- 在 Access 中,在文件选项卡上,你可以选择新建。以 ACCDB 格式创建一个新的空数据库。
将所有对象移动到新容器
千万不能使用导入/导出功能 Access 中移动的对象,而不是简单地点击和拖动。这样做可以将损坏的项目复制到新容器。
表:
- 对于旧访问容器中的每个表,在新容器中创建一个新表。
- 从设计视图中,复制/粘贴字段定义。
- 检查表属性以确保它们在两个数据库中都匹配
- 同时移动任何数据宏(有关如何执行此操作,请参阅宏部分)
- 要移动数据,请将旧数据导出为 XML 或 CSV,然后从该格式导入。
查询:
- 将每个查询加载到 SQL 视图中。
- 复制/粘贴 SQL 文本。
- 粘贴到新数据库中。
- 比较查询属性以确保它们匹配。
表格/报告:
- 对于每个表单/报表,使用 Application.SaveAsText 函数将表单/报表导出到文本文件。
- 删除二进制数据(请参阅从表单文档中删除二进制数据以熟悉此过程)
- 使用 Application.LoadFromText 函数将对象重新导入新数据库
宏
你有三种移动宏的方法。
- 在新数据库容器中手动重新创建每个宏。
- 将
Application.SaveAsText
/Application.LoadFromText
方法与acMacro
参数一起使用。 - 复制/粘贴每个宏的宏定义
- 选择全部(Control + A)以选择所有宏元素。然后复制(Control + C)。
- 打开一个空白的记事本文档并粘贴(Control + V)宏 XML。
- 在新数据库容器中创建一个新的空白宏。
- 在记事本中,选择所有文本(Control + A)。然后复制(Control + C)
- 在空白宏中,粘贴(Control + V)。应该出现宏。保存。
模块
- 对于每个模块,选择所有代码(Control + A)并粘贴(Control + V)到新数据库容器中。
- 请务必检查数据库属性(在 VBA 窗口中,转到工具 - >客户端属性)
数据宏
对于每个数据宏,请使用 SaveAsText / LoadFromText 方法。
- 进入 VBA 立即窗口(Control + G)
- 输入
Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"
(将 MyTableName 替换为包含数据宏的表的名称) - 检查文件是否有任何腐败迹象
- 在新数据库容器中,使用
Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"
加载定义
如前所述,这是一项很多工作,但它有结果。将 Access 97 数据库迁移到 2000 或 Access 2000 数据库迁移到 2003 时,也应使用此方法。