EIBInterBaseError with message invalid transaction handle
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:
Estes erros ocorre logo após executar um select simples:
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
Curtidas 0
Respostas
Nomad
15/03/2022
https://stackoverflow.com/questions/39471426/error-invalid-transaction-handle-expecting-explicit-transaction-start-execut
GOSTEI 0
Pestana
15/03/2022
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!
GOSTEI 0
Pestana
15/03/2022
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:
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!
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!
GOSTEI 0
Raimundo Pereira
15/03/2022
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;
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
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
GOSTEI 0
Pestana
15/03/2022
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?
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?
GOSTEI 0