删除数据库内容后,MS Access(.mdb)文件大小是否会减少?

时间:2008-10-01 05:25:02

标签: ms-access

我使用JDBC-ODBC驱动程序将数据插入MS Access数据库。空白的mdb文件是2KB。填充此数据库后,大小增加到155MB。然后我删除了数据。但我发现mdb的大小仍然与155MB相同。我没有得到任何错误。但这种方式是正常的吗?我希望文件大小减少。如果以这种方式设计,背后的想法是什么?感谢

5 个答案:

答案 0 :(得分:38)

在您压缩数据库之前,MS Access不会回收记录空间。

作为定期维护的一部分,您应该对访问数据库执行此操作,否则您将遇到一些非常痛苦的问题。

您可以通过MS Access UI压缩数据库(工具 - >数据库实用程序 - >
 Compact&Repair Database)您可以使用命令提示符:

msaccess.exe "target database.accdb" /compact 

N.B。 / Compact开关必须位于目标数据库之后

答案 1 :(得分:19)

即使删除了记录,MS Access也不会释放记录使用的空间。您可以在需要时手动释放空间,或在每次关闭应用程序时自动释放空间。

要手动执行此操作,请使用“压缩和修复”实用程序:

  1. 备份您的数据库,因为在压缩过程中有bug in Access 2007可能会删除您的数据库。

  2. 如果要压缩位于服务器或共享文件夹上的多用户(共享)数据库,请确保没有其他人打开它。

  3. 在“工具”菜单上,指向“数据库实用工具”,然后单击“压缩和修复数据库”。

  4. 关闭应用程序时自动执行此操作:

    1. 打开您希望MS Access自动压缩的数据库。

    2. 在“工具”菜单上,单击“选项”,然后选择“常规”选项卡。

    3. 选中Compact On Close复选框。

    4. 删除数据并压缩数据库后,如果仍然大于100 KB,请不要感到惊讶。第一次添加数据后,有一定数量的开销无法删除。

      此外,请注意,自动编号字段值的行为与压缩过程后公布的不同:根据MS Access 2000文档,如果从具有“自动编号”字段的表的末尾删除记录,则压缩数据库会重置“自动编号”值。因此,您添加的下一条记录的AutoNumber值将大于表中最后一条未删除记录的AutoNumber值。

      发现这种情况:如果您有100个自动编号记录并删除最后50个,则下一个自动编号记录(根据文档)应编号为“51”。但根据我的经验,它编号为“101”,而不是。

答案 2 :(得分:2)

如上所述,第一站应该是尝试压缩/修复数据库。但是,通过创建新数据库并从旧数据库导入所有对象,您也可以节省一些大小。

答案 3 :(得分:1)

您可以使用JRO从代码压缩数据库。请参阅:http://support.microsoft.com/kb/230501

答案 4 :(得分:-2)

如上所述,第一站应该是尝试压缩/修复数据库。但是,通过创建新数据库并从旧数据库导入所有对象,您还可以节省一些大小。过去,将它转换为MDE可以让你更多。与往常一样,不要使用您的生产副本。此外,如果您使用MDE,请确保首先正确拆分数据库。 (当然,如果您将来需要进行修改,请保留源MDB的副本。)