前台:D7或D2005; DBExpress连接组件:  TSqlConnection,TSqlQuery ,TDataSetProvider,TClientDataSet;后台:SQL Server 2000;更新数据的命令:DataSetProvider.ApplyUpdates(ClientDataSet.Delta , -1 , ErrorCount);  设置DataSetProvider.ResolvetoDataSet:= True,用以触发BeforeUpdateRecord事件处理函数; 更新数据的命令写在BeforeUpdateRecord事件中。
保存时出错,提示为:
 Cannot create new transaction because capacty was exceeded.
问题:  1、更新数据前必须要断开连接后再重新连接,否则就有可能出错。错误的提示意思是不能再开启事务了,其实根本就没有手动开启事务,只有BeforeUpdateRecord自动开启的事务。  2、因为更新每一个ClientDataSet之前都要断开连接,因此更新多个ClientDataSet时无法进行事务处理。找了几个编程论坛都没有找到解决方法,郁闷!

解决方案 »

  1.   

    在你调用ClientDataSet.ApplyUpdates(0)之前调用一下
    SQLConnection1.CloseDataSets;
    另外更新一下你的Dbexpress For MSSQL的驱动。就一个dbexpmss.dll文件而已。
      

  2.   

    終于有人回貼了﹐ 感謝  xiaocuo_zrf﹗  用 SQLConnection1.CloseDataSets 是在不斷開連接的情況下關閉所有的數據集﹐好象和我先斷開是
    相同的意思吧﹖為什么一定要先關閉呢﹖又沒有手動開啟事務﹖而且這樣也同樣會面臨更新不止一個
    ClientDataSet 時不好使用事務的問題。  我使用D2005﹐還有比這更新的dbexpress驅動嗎﹖在哪里下載﹖
      

  3.   

    呵呵。如果是D2005应该没有更新的驱动了:( 这个错误以前困扰了我很久。我想应该是DBexpress For 
    MSSQL的Bug,你通过SQLMonitor 追踪会发现是事务处了问题,启动一个事务失败了就会出现这样的错误,调用SQLConnection1.CloseDataSets 似乎可以避免,我唯一的一次使用Dbexpress在项目中就被这个错误困扰了很久。当时还有一个问题,就是如果UpdateMode置为upWhereAll或者upWhereChage,一旦出现浮点数也会出现提交失败(record not found or change by ....)错误,应该是小数位的问题。
    不知道现在修正没有
      

  4.   

    这么说来DBExpress + MsSqlServer 是无法自已处理更新两个以上的ClientDataSet时的事务了吗?
      

  5.   

    xiaocuo_zrf(女巫手上的猫) 重現呀.