EIBInterBaseError with message invalid transaction handle

15/03/2022

0

Eu estou migrando um sistema antigo desenvolvido em Delphi 7 + IBX + Firebird 2.1.7 W32 para o Delphi 10.4 + IBX + Firebird 2.1.7 W64

Este sistema estava em produção em uma máquina com o Windows XP.

Começou aparecer este erro que antes não existia:
EIBInterBaseError with message ''invalid transaction handle (expecting explicit transaction start)
e as vezes também aparece este erro:
EIBInterBaseError with message ''Error writing data to the connection.''
Eu não alterei nada no código fonte. Alguém sabe o porque deste erro?

Estes erros ocorre logo após executar um select simples:

with DM.qryPesq do
begin
  Close;
  SQL.Clear;
  SQL.Add(''SELECT id_pessoa, senha'');
  SQL.Add(''  FROM usuario'');
  SQL.Add('' WHERE login = :login'');
  Params[0].AsString := Trim(edtLogin.Text);
  Open;
end;
Pestana

Pestana

Responder

Posts

15/03/2022

Nomad

https://stackoverflow.com/questions/39471426/error-invalid-transaction-handle-expecting-explicit-transaction-start-execut
Responder

16/03/2022

Pestana

https://stackoverflow.com/questions/39471426/error-invalid-transaction-handle-expecting-explicit-transaction-start-execut


Bom dia!

Obrigado por tentar me ajudar, mas ainda não consegui resolver o problema!

Responder

20/03/2022

Pestana

Eu descobri que este erro citado no primeiro post ocorre depois de registrar eventos com o componente IBEvents, mas não sei qual é o motivo do erro.

depois que o sistema registrou os eventos através desta função:

// registrar os eventos no sistema para que as estações sejam atualizadas
procedure TfrmPrincipal.RegistrarEventos;
var
  arqEventos: TStringList;
  caminho: string;
begin
  arqEventos := TStringList.Create;
  try
    try
      caminho := ExtractFilePath(Application.ExeName)+'Eventos.cfg';
      if FileExists(caminho) then
      begin
        arqEventos.LoadFromFile(caminho);
        with evEventoAlerta do
        begin
          UnRegisterEvents;
          Events.Text := arqEventos.Text;
          RegisterEvents;
        end;
      end;
    except
      on e: Exception do
      begin
        Application.Terminate;
        raise Exception.Create(e.Message);
      end;
    end;
  finally
    arqEventos.Free;
  end;
end;



ocorre o erro quando é executado o select citado no primeiro post, se eu não registrar os eventos excluindo a função RegistrarEventos não ocorre o erro.


Alguém poderia me ajudar com este problema?


Obrigado!
Responder

21/03/2022

Raimundo Pereira

Bom dia amigo!!

Realizei todos os testes aqui, tudo funcionou!
Tanto a parte do select quanto seu procedimento para registrar os eventos.


Var qryPesq:TFDQuery;
begin
RegistrarEventos; // Não apresentou erro e seguiu com o select.

qryPesq:=TFDQuery.Create(self);
With qryPesq do begin
Connection:=DM.CNX;
Close;
Sql.Clear;
SQL.Add(' SELECT id_pessoa, senha');
SQL.Add(' FROM usuario');
SQL.Add(' WHERE login =:login');
Params[0].AsString := Trim(edtLogin.Text);
try
Open;
ShowMessage(IntToStr(RecordCount));
Except
on E: Exception do
begin
ShowMessage('Erro: ' + E.Message );
Copie_String(SQL.Text);
end;
end;
end;

procedure TFP.RegistrarEventos;
var
  arqEventos: TStringList;
  caminho: string;
begin
  arqEventos := TStringList.Create;
  try
    try
      caminho := ExtractFilePath(Application.ExeName)+'Eventos.cfg';
      if FileExists(caminho) then
      begin
        arqEventos.LoadFromFile(caminho);
        with evEventoAlerta do
        begin
          UnRegisterEvents;
          Events.Text := arqEventos.Text;
          RegisterEvents;
        end;
      end;
    except
      on e: Exception do
      begin
        Application.Terminate;
        raise Exception.Create(e.Message);
      end;
    end;
  finally
    arqEventos.Free;
  end;
end;



Você precisará debugar o registrarevento ao invés da rotina do select, já que é a rotina de registrar o evento lhe impede de rodar seu select.
Eu coloquei no mesmo form >>> evEventoAlerta, debugando a rotina de registrar evento pode lhe conceder maiores informações


Responder

22/03/2022

Pestana

Boa tarde meu amigo!

Sim eu debuguei o sistema e a execução passa pela a rotina RegistrarEventos sem erros, mas ao tentar abrir a query ou uma IBStoredProc para executar uma procedure do banco ocorre o erro.

O estranho é que as vezes executa a query, mas quando a linha de comando chega em uma outra função que executa o IBStoredProc acontece o erro.

Eu estou desconfiado que tem algum conflito com a transação destes componentes. Porque será que tudo funcionava bem no Delphi 7 mas agora no Delphi 10.4 ocorre estes erros?



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar