1

我正在尝试按 ID 删除文件中的表行,但是在处理大文件(大小为 35 MB 或更大).mdb时会出现异常。.mdb例外是“ System resources exceeded (3035)”。

但是在处理小文件时没有问题。

连接是通过使用 CDaoDatabse 实现的,它表示与数据库的连接,您可以通过该连接对数据进行操作。程序是用 C++ 编写的。

一段代码如下所示:

CDaoDatabase* pDatabase
BeginTransaction(pDatabase);

  try
    {
    sSQL.Format("Delete from %s where %s = %d",DaoTrianglesTable,DaoObjectIdField,nObjectId);
    pDatabase->Execute(sSQL);
    }
  catch(CDaoException* e)
    {        
    DisplayDaoException(e);
    EndTransaction(pDatabase,false);      
    }  
EndTransaction(pDatabase,true);  

请注意,如果我删除函数BeginTransaction()EndTransaction()运行程序,那么没问题。但是,我不确定这是正确的解决方案,是否有任何替代解决方案?可能有人遇到过这种情况吗?

4

2 回答 2

1

Access 2010 的修补程序:http: //support.microsoft.com/kb/2726928 在 Access 2010 中执行查询时出现“超出系统资源”错误消息

日期为 2012 年 10 月 30 日。您的里程可能会有所不同。

于 2013-09-11T09:48:26.647 回答
1

首先,一个 Access 数据库的 35MB 真的不算大,实际上有点小。

但是,在执行事务时,Access 会跟踪所有已删除的数据,如果您要删除很多数据,您可能会超过 Access 在事务期间使用的锁数。

看看以下内容:

如果您正在执行大量连接/断开 Access 数据库的循环,则可能出现的另一个问题是,在您尝试再次连接到数据库之前,锁定文件可能无法足够快地释放。
在这种情况下,只需确保与数据库保持连接,并保持打开状态,直到完全完成。

除了使用事务,您还可以添加dbFailOnErrorExecute(). 另一种方法也是完全取消事务,首先制作数据库的副本作为备份,执行删除,如果出现大问题则手动恢复数据库。

但在大多数情况下,我从未见过数据库在DELETE操作过程中失败,除非表之间的关系具有复杂的级联更新/删除,这可能会在其他约束中造成失败。

于 2013-09-06T08:03:25.767 回答