执行过程:
使用表格控件操作一个表,当删除表中的一行数据后,再添加一条和删除记录主索引完全相同的记录,然后使用ApplyUpdates(-1)提交数据,出现数据表死锁.原因分析:
由于数据表定义了唯一索引,当使用midas模式提交表格控件的数据进行数据库更新时,删除的数据并未从应用服务器中将记录删除,而只是客户端记录删除,导致客户端批量更新应用服务器和数据库时违反唯一索引规则,所以导致死锁.请求解决:
如何检测这种情况,避免出现数据表死锁.

解决方案 »

  1.   

    不用表格也是一样,只要是使用delete删除一条记录,并且不进行applyupdate操作,然后又添加一条和刚才delete记录存在唯一索引冲突的记录,再进行applyupdate操作时就会导致应用服务器无响应,查看sql server进程监控时,响应表出现死锁标志.
      

  2.   

    Borland Delphi7在用DBexpress控件的时候本来就有明确定义事务和ApplyUpdate()调用之间交错时,回报错的Bug
      

  3.   

    问题的关键就在于Delete后没有更新数据库,再insert同一条记录进行applyupdate时,产生一个key锁死.
      

  4.   

    midas正常是可以处理唯一索引的错误获取的,例如insert两条一样的记录再进行applyupdate可以扑获到违反唯一索引规则的错误,我现在碰到的情况比较特殊,难道需要改写applyupdate方法吗?