Mensagem de erro ao dar um Comit na trasação Transaction ID Not found
Boa tarde a todos estou tendo um problema no meu código toda vez que finalizo a tranzação de Compra quando do um comit, apesar dele salvar as informações no banco da essa mensagem de erro:
Project Financeiro.exe raised exception class Exception with message 'Transaction ID not found.'. Process stopped. Use Step or Run to continue.
Gostaria de da ajuda de alguem para resolver esse problema, estou trabalhando com Delphi 7 e Firebird 2.0.5
O código onde da o erro é o seguinte:
procedure TDM.InsereCompra(aidEmpresa, aIdEstoque :Integer);
var
idCompra : Integer;
begin
idCompra := 0;
Start;
try
with spIUCompra do
begin
Params[0].AsInteger := cdsCompraID_COMPRA.AsInteger;
Params[1].AsString := cdsCompraNF_COMPRA.AsString;
Params[2].AsInteger := cdsCompraID_FORNECEDOR.AsInteger;
Params[3].AsBCD := cdsCompraVL_TOTALCOMPRA.AsFloat;
Params[4].AsInteger := cdsCompraID_SOLICITACAOCOMPRA.AsInteger;
Params[5].AsInteger := cdsCompraID_FUNCIONARIO.AsInteger;
Params[6].AsInteger := cdsCompraCFOP.AsInteger;
Params[7].AsDate := cdsCompraDT_COMPRA.AsDateTime;
ExecProc;
if cdsCompraID_COMPRA.AsInteger <> 0 then
idCompra := cdsCompraID_COMPRA.AsInteger
else
idCompra := Params[8].AsInteger;
end;
//Insere Itens
cdsItemCompra.First;
while not cdsItemCompra.Eof do
begin
with spIUItemCompra do
begin
Params[0].AsInteger := cdsItemCompraID_ITEMCOMPRA.AsInteger;
Params[1].AsInteger := idCompra;
Params[2].AsInteger := cdsItemCompraID_PRODUTO.AsInteger;
Params[3].AsBCD := cdsItemCompraQUANTIDADE.AsFloat;
Params[4].AsBCD := cdsItemCompraVL_UNIT.AsCurrency;
Params[5].AsBCD := cdsItemCompraVL_TOTAL.AsCurrency;
Params[6].AsBCD := cdsItemCompraIPI.AsCurrency;
Params[7].AsBCD := cdsItemCompraICMS.AsCurrency;
ExecProc;
end;
InsereQuantidade(aidEmpresa,aIdEstoque,cdsItemCompraID_PRODUTO.AsInteger, cdsItemCompraQUANTIDADE.AsCurrency);
cdsItemCompra.Next;
end;
Comit;
except
Rollback;
end;
end;
Project Financeiro.exe raised exception class Exception with message 'Transaction ID not found.'. Process stopped. Use Step or Run to continue.
Gostaria de da ajuda de alguem para resolver esse problema, estou trabalhando com Delphi 7 e Firebird 2.0.5
O código onde da o erro é o seguinte:
procedure TDM.InsereCompra(aidEmpresa, aIdEstoque :Integer);
var
idCompra : Integer;
begin
idCompra := 0;
Start;
try
with spIUCompra do
begin
Params[0].AsInteger := cdsCompraID_COMPRA.AsInteger;
Params[1].AsString := cdsCompraNF_COMPRA.AsString;
Params[2].AsInteger := cdsCompraID_FORNECEDOR.AsInteger;
Params[3].AsBCD := cdsCompraVL_TOTALCOMPRA.AsFloat;
Params[4].AsInteger := cdsCompraID_SOLICITACAOCOMPRA.AsInteger;
Params[5].AsInteger := cdsCompraID_FUNCIONARIO.AsInteger;
Params[6].AsInteger := cdsCompraCFOP.AsInteger;
Params[7].AsDate := cdsCompraDT_COMPRA.AsDateTime;
ExecProc;
if cdsCompraID_COMPRA.AsInteger <> 0 then
idCompra := cdsCompraID_COMPRA.AsInteger
else
idCompra := Params[8].AsInteger;
end;
//Insere Itens
cdsItemCompra.First;
while not cdsItemCompra.Eof do
begin
with spIUItemCompra do
begin
Params[0].AsInteger := cdsItemCompraID_ITEMCOMPRA.AsInteger;
Params[1].AsInteger := idCompra;
Params[2].AsInteger := cdsItemCompraID_PRODUTO.AsInteger;
Params[3].AsBCD := cdsItemCompraQUANTIDADE.AsFloat;
Params[4].AsBCD := cdsItemCompraVL_UNIT.AsCurrency;
Params[5].AsBCD := cdsItemCompraVL_TOTAL.AsCurrency;
Params[6].AsBCD := cdsItemCompraIPI.AsCurrency;
Params[7].AsBCD := cdsItemCompraICMS.AsCurrency;
ExecProc;
end;
InsereQuantidade(aidEmpresa,aIdEstoque,cdsItemCompraID_PRODUTO.AsInteger, cdsItemCompraQUANTIDADE.AsCurrency);
cdsItemCompra.Next;
end;
Comit;
except
Rollback;
end;
end;
George Medeiros
Curtidas 0
Respostas
Wilson Junior
26/10/2010
Veja se este link lhe ajuda https://www.devmedia.com.br/post-18316-TransactionDesc--Delphi.html
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
George Medeiros
26/10/2010
Caro Wilson, já estou fazendo isso só que de forma diferente de uma olhada para ver o que você acha.
procedure TDM.Start;
begin
Transc.IsolationLevel := xilREADCOMMITTED;
Transc.TransactionID := StrToInt(IDTransaction);
SQLConnection1.StartTransaction(Transc);
end;
procedure TDM.Comit;
begin
SQLConnection1.Commit(Transc);
end;
procedure TDM.Rollback;
begin
SQLConnection1.Rollback(Transc);
raise Exception.Create(MSG_ERRO);
end;
procedure TDM.Start;
begin
Transc.IsolationLevel := xilREADCOMMITTED;
Transc.TransactionID := StrToInt(IDTransaction);
SQLConnection1.StartTransaction(Transc);
end;
procedure TDM.Comit;
begin
SQLConnection1.Commit(Transc);
end;
procedure TDM.Rollback;
begin
SQLConnection1.Rollback(Transc);
raise Exception.Create(MSG_ERRO);
end;
GOSTEI 0
Wilson Junior
26/10/2010
Veja se isto lhe ajuda
Espero ter colaborado.
procedure IniTransacao(Conexao: TSQLConnection; TipoTrans: TTransactionDesc);
begin
with Conexao do
begin
if not Conexao.InTransaction then
StartTransaction(TipoTrans)
;
end;
end;
procedure GravaTransacao(Conexao: TSQLConnection; TipoTrans: TTransactionDesc);
begin
with Conexao do
begin
if inTransaction then
Commit(TipoTrans)
;
end;
end;
procedure CancelTransacao(Conexao: TSQLConnection; TipoTrans: TTransactionDesc);
begin
with Conexao do
begin
if inTransaction then
Rollback(TipoTrans)
;
end;
end;
{ Dentro do OnCreate do DataModule }
TMyDataModule = class(TDataModule)
...
public
TransDesc: TTransactionDesc;
end;
procedure TMyDataModule.DataModuleCreate(Sender: TObject);
begin
TransDesc.TransactionID := 1;
TransDesc.IsolationLevel := xilREADCOMMITTED;
end;Espero ter colaborado.
GOSTEI 0
George Medeiros
26/10/2010
Wilson comentei a linha Transc.TransactionID := StrToInt(IDTransaction); e aparentemente resolveu, consegui inserir mais de uma compra com o sistema em execução fiz venda e tudo deu certo. Vou fazer mais testes para ver se realmente ta tudo ok.
GOSTEI 0
Wilson Junior
26/10/2010
Beleza, qualquer coisa é só perguntar.
GOSTEI 0