重建整个数据库

这是很多工作,所以在用完所有其他选项之后这是最后的手段。如果在不同的计算机上针对不同的用户发生问题,则只需执行此操作。如果没有为所有用户发生,那么很可能它不是一个损坏的数据库容器。

与删除二进制数据的步骤类似,你将从头开始重建数据库。这个过程有点仪式化,但如果小心翼翼地小心谨慎,不要保留任何可能的腐败,那么这个过程就非常有效。

创建一个新的访问数据库容器

  • 在 Access 中,在文件选项卡上,你可以选择新建。以 ACCDB 格式创建一个新的空数据库。

将所有对象移动到新容器

千万不能使用导入/导出功能 Access 中移动的对象,而不是简单地点击和拖动。这样做可以将损坏的项目复制到新容器。

表:

  • 对于旧访问容器中的每个表,在新容器中创建一个新表。
  • 从设计视图中,复制/粘贴字段定义。
  • 检查表属性以确保它们在两个数据库中都匹配
  • 同时移动任何数据宏(有关如何执行此操作,请参阅宏部分)
  • 要移动数据,请将旧数据导出为 XML 或 CSV,然后从该格式导入。

查询:

  • 将每个查询加载到 SQL 视图中。
  • 复制/粘贴 SQL 文本。
  • 粘贴到新数据库中。
  • 比较查询属性以确保它们匹配。

表格/报告:

  • 对于每个表单/报表,使用 Application.SaveAsText 函数将表单/报表导出到文本文件。
  • 删除二进制数据(请参阅从表单文档中删除二进制数据以熟悉此过程)
  • 使用 Application.LoadFromText 函数将对象重新导入新数据库

你有三种移动宏的方法。

  1. 在新数据库容器中手动重新创建每个宏。
  2. Application.SaveAsText / Application.LoadFromText 方法与 acMacro 参数一起使用。
  3. 复制/粘贴每个宏的宏定义
    • 选择全部(Control + A)以选择所有宏元素。然后复制(Control + C)。
    • 打开一个空白的记事本文档并粘贴(Control + V)宏 XML。
    • 在新数据库容器中创建一个新的空白宏。
    • 在记事本中,选择所有文本(Control + A)。然后复制(Control + C)
    • 在空白宏中,粘贴(Control + V)。应该出现宏。保存。

模块

  • 对于每个模块,选择所有代码(Control + A)并粘贴(Control + V)到新数据库容器中。
  • 请务必检查数据库属性(在 VBA 窗口中,转到工具 - >客户端属性)

数据宏

对于每个数据宏,请使用 SaveAsText / LoadFromText 方法。

  1. 进入 VBA 立即窗口(Control + G)
  2. 输入 Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"(将 MyTableName 替换为包含数据宏的表的名称)
  3. 检查文件是否有任何腐败迹象
  4. 在新数据库容器中,使用 Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" 加载定义

如前所述,这是一项很多工作,但它有结果。将 Access 97 数据库迁移到 2000 或 Access 2000 数据库迁移到 2003 时,也应使用此方法。