为什么我的Access 2007数据库增长如此之多?

X-R*_*Ray 5 ms-access ado ms-access-2007

我在一个Win32应用程序上工作,该应用程序已经开发出一个非常奇怪的数据库问题,这个问题正在悄然增长,直到最终达到2 GB的文件大小 我们使用ADO连接到Access 2007数据库.该应用程序已经很好地工作多年,没有观察到这样的困难.如您所想,当它达到2 GB的限制时,数据库就会损坏.我现在有很多客户数据库被发送给我们进行维修 - 大小约为2GB.一旦压缩,它们就会回到<10 MB.

我们看到一些数据库随着时间的推移而增长但从未在这种规模上增长.

我创建了一个小型数据库"checker",它将所有记录中所有字段的内容相加,以便了解存在多少实际数据.在最近已经压缩的数据库上检查了这个新工具后,我认为该工具正常工作.所有膨胀的数据库每个都有不超过10 MB的数据.

我们不会在应用启动时压缩数据库.在我看来,因为我们不删除大量数据,所以压缩数据库不是我们"应该"需要做的事情.具有较大数据库的客户(有一些但是它们在早期版本中).

你能否建议我们如何能够将<10 MB的数据库增加到2 GB?

关于我们的应用程序的作用的一些评论:

  • 当ADO没有打开数据库时,使用DAO完成任何重组.

  • 我们确实在一些地方使用交易

  • 为方便起见,某些记录便于删除和重新创建,而不是查找/编辑/删除.通常,此操作涉及5-30条记录,每条记录大约8K.这仅在用户按下"保存"时发生.

  • 还有其他记录类型大约70 KB /记录但我们没有使用删除/重新创建.

  • 我们使用BLOB("OLEObject")字段来存储二进制数据.

感谢您提供的任何见解.

X-R*_*Ray 2

感谢大家的帮助。发现事情发生的地方:

var
  tbl:ADOX_TLB.Table;
  cat:ADOX_TLB.Catalog;
  prop:ADOX_TLB.Property_;
begin
  cat:=ADOX_TLB.CoCatalog.Create;

  cat.Set_ActiveConnection(con.ConnectionObject);

  // database growth here
  tbl:=cat.Tables.Item[sTableName];

  prop:=tbl.Properties['ValidationText'];

  Result:=prop.Value;

  prop:=nil;
  tbl:=nil;
  cat:=nil;
end;
Run Code Online (Sandbox Code Playgroud)

每次调用此函数时,数据库都会增长约 32KB。

我改为减少执行此功能,并使用 DAO 而不是 ADO 来执行。