
Delphi(Pascal) code:
procedure TfrmRQZLGL.btnDelete_ZLClick(Sender: TObject)
var
Str1,Str2:string
begin
if Application.MessageBox('正在删除信息,是否继续?', '提示信息', MB_YESNO +
MB_ICONQUESTION) = IDYES then
begin
Str1 := Format('delete from RQ_ZLZB where BillNo = %s',[qry_ZLZB.FieldByName('BillNo').AsString])
Str2 := Format('delete from RQ_ZLMXB where BillNo = %s',[qry_ZLZB.FieldByName('BillNo').AsString])
if not DMMain.conMain.InTransaction then DMMain.conMain.BeginTrans
try
DMMain.ExecSQLA(Str1)
DMMain.ExecSQLA(Str2)
except
if DMMain.conMain.InTransaction then DMMain.conMain.RollbackTrans
end
DMMain.conMain.CommitTrans
end
end
有以上代码,用来删除主表和从表的关联数据,但是 报错了,说 ‘没有活动事务’,望高人指点!
应该是出错后RollbackTrans后再执行CommitTrans报错吧
Delphi(Pascal) code:
try
DMMain.ExecSQLA(Str1)
DMMain.ExecSQLA(Str2)
Except
if DMMain.conMain.InTransaction then DMMain.conMain.RollbackTrans
end
DMMain.conMain.CommitTrans
我是在 Except 里面写的 RollBackTrans 最后CommitTrans的
{
1。通过线程的互斥来同步 *** 作数据库 2。数据库采用事务处理表中的数据 3。采用共享方式打开数据库,不是以独占方式打开数据库 建立一个mysql连接表加上一个临界区,表结点是这样的(mysqlcon,bool),根据实际情况定大校我用的是10个连接。使用tsqlconnection的BeginTransaction、CommitFreeAndNil和RollbackIncompleteFreeAndNil等方法来完成事务处理,跟ado的用法一样的。var
Transaction: TDBXTransaction
begin
Transaction := curConn.BeginTransaction
if not Assigned(Transaction) then Exit
try
//完成A表内容修改的代码
//完成B表内容修改的代码
curConn.CommitFreeAndNil(Transaction)
except on E: Exception do
curConn.RollbackIncompleteFreeAndNil(Transaction)
end
end
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)