使用COMMIT和ROLLBACK进行多个SQL更新的Delphi应用程序

时间:2010-03-25 16:07:24

标签: sql-server-2005 delphi sql-server-2000

在将SQL查询嵌入到多次调用SQL for Table Updates的应用程序中时,是否可以使用SQL BEGIN TRANSACTION,COMMIT TRANSACTION,ROLLBACK TRANSACTION。例如,我有以下代码:

Q.SQL.ADD(<UPDATE A RECORD>);
Q.ExecSQL;

Q.Close;
Q.SQL.Clear;
Q.SQL.ADD(<Select Some Data>);
Q.Open;

设置一些变量

Q.Close;
Q.SQL.Clear;
Q.SQL.ADD(<UPDATE A RECORD>);
Q.ExecSQL;

我想要做的是如果第二次更新失败,我想回滚第一笔交易。

如果我为BEGIN,COMMIT,ROLLBACK设置一个唯一的表示法,以便指定提交或回滚的内容,是否可行。

即。在第一个更新之前指定BEGIN TRANSACTION_A 然后在上次更新后指定COMMIT TRANSACTION_A

我希望这是有道理的。如果我在SQL存储过程中执行此操作,那么我将能够在过程的开始和结束时指定它,但由于进程块和重载SQL上的死锁,我不得不将代码分解为可管理的块服务器

1 个答案:

答案 0 :(得分:8)

在连接上使用StartTransaction,Commit和Rollback会不会更容易?

e.g。

Q.Connection.StartTransaction
try
    Q.SQL.ADD(); 
    Q.ExecSQL;

    Q.Close; 
    Q.SQL.Clear; 
    Q.SQL.ADD(); 
    Q.Open;

    ...


    Q.Close; 
    Q.SQL.Clear; 
    Q.SQL.ADD(); 
    Q.ExecSQL;
    Q.Connection.Commit;
except
    Q.Connection.Rollback;
end;