29

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

4

5 回答 5

41

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

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

您可以通过 MS Access UI(工具 -> 数据库实用程序 ->
压缩和修复数据库)压缩数据库,您可以使用以下命令提示符:

msaccess.exe "target database.accdb" /compact 

注意 /Compact 开关必须在目标数据库之后

于 2008-10-01T05:32:10.263 回答
19

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

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

  1. 备份您的数据库,因为Access 2007中的一个错误可能会在压缩过程中删除您的数据库。

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

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

要在您关闭应用程序时自动执行此操作:

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

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

  3. 选中关闭时压缩复选框。

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

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

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

于 2008-10-01T05:30:42.140 回答
2

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

于 2011-05-22T11:14:07.910 回答
1

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

于 2010-02-17T10:32:52.427 回答
-1

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

于 2009-05-17T09:47:26.780 回答