提问一个事务提交,造成表锁住,回滚不成功的奇怪问题。请高手帮忙。(100分)

  • 主题发起人 主题发起人 blackfiles
  • 开始时间 开始时间
B

blackfiles

Unregistered / Unconfirmed
GUEST, unregistred user!
用Database,query ,与SqlServer7.0连,先在本地缓存,然后提交,Databaset的TransIsolation=iRepeatableRead
代码大概如下:
query1.first; //转到首记录
while not query1.eof do
begin
query1.edit; //编辑QRY1
...
query1.post; //把它提交到自己本机的内存,但未真正保存到数据库。
//--
query2.edit;
....
query2.post;
//--
query3.insert;
...
query3.post;
query1.next;
end;//做完循环语句,然后开始做提交
database1.StartTransaction;
try
query1.ApplyUpdates;
query2.ApplyUpdates;
query3.ApplyUpdates;
database1.Commit;
except
database1.Rollback;
showmessage('事务出错');
end;
query1.CommitUpdates;
query2.CommitUpdates;
query3.CommitUpdates;

在这里会抱错:
General SQL error.
[Microsolf][odbc sql server driver][sql error]
your transaction(process ID #21) was deadlocked with another process and hasbeen closen as the deadlock victim. Return your transaction.

而且 被三个表的记录并没有都滚回,只滚回了2个,A表的被改变了。

请问是怎么回事???该怎样解决??谢谢。
 
一次一次递交,分开写!
query1、query2、query3不可能同时递交,或者同时rollback!
 
三个query全部根据需要修改成update、insert等,然后放到事务中execsql即可
 
后退
顶部