delphi事务处理中怎么数据库打不开出错

delphi事务处理中怎么数据库打不开出错,第1张

Delphi 有关事务的处理 - Delphi / 数据库相关

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10869325.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存