Fórum Mensagem de erro ao dar um Comit na trasação "Transaction ID Not found" #389380

26/10/2010

0

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;
George Medeiros

George Medeiros

Responder

Posts

26/10/2010

Wilson Junior

Veja se este link lhe ajuda https://www.devmedia.com.br/post-18316-TransactionDesc--Delphi.html

Espero ter colaborado.
Responder

Gostei + 0

26/10/2010

George Medeiros

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;
Responder

Gostei + 0

26/10/2010

Wilson Junior

Veja se isto lhe ajuda
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.
Responder

Gostei + 0

26/10/2010

George Medeiros

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.
Responder

Gostei + 0

26/10/2010

Wilson Junior

Beleza, qualquer coisa é só perguntar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar