Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Celamar

IBTransaction

Recommended Posts

Minhas transações só funciomam corretamente se eu usar Transação.Commit nos SELECT também, isso é real?

 

Eu tenho que startar a transação para os SELECTs tb?? Não seria apenas para os INSERT, UPDATE E DELETE.

 

Não vi outra forma a não ser essa.

 

Veja como está meu código:

//na interface (Botão inserir)        //INICIO transação        try          GobjSituacao.TransacaoSituacao.Active := true;          if not GObjSituacao.TransacaoSituacao.InTransaction then             GObjSituacao.TransacaoSituacao.StartTransaction;          if not GobjSituacao.fnInserirRegistro then             begin                  GObjSituacao.TransacaoSituacao.RollbackRetaining;                  GObjSituacao.TransacaoSituacao.Active := false;                  exit;             end          else             begin               GObjSituacao.TransacaoSituacao.Commit;               GObjSituacao.TransacaoSituacao.Active := false;             end;        except           on e: exception do           begin             GObjSituacao.TransacaoSituacao.Rollback;             GObjSituacao.TransacaoSituacao.Active := false;                          fnMostrarMensagemPadrao(Self.Handle, 'Erro', ESTILO_MSG_INFORMA);             exit;           end;        end;

 

//na classe GobjSituacao  (*** CONSTRUCTOR DA CLASSE)  qrySQLQuery := TIBQuery.Create ( nil );  qrySQLQuery.Database := cnnConexaoBanco; {Database}  qrySQLQuery.SQL.Clear;  trsTransSituacao := TIBTransaction.Create(nil);  trsTransSituacao.DefaultDatabase := cnnConexaoBanco;   qrySQLQuery.Transaction := trsTransSituacao;  ...  (*** FUNCTION INSERIR REGISTRO)  ...  qrySQLQuery.SQL.Add ('INSERT INTO SITUACAO...  try    qrySQLQuery.ExecSQL;    qrySQLQuery.Close;    Result := true;  except on E: exception do    begin      MensagemErro := 'Erro em SITUACAO.fnInserirRegistro: ' + E.Message;      Result := false;      exit;    end;

 

Se retornar TRUE é pq gravou os dados...

Retorna para a interface e cai na linha do Commit;

Funcionou perfeitamante, mas se eu clicar no botão LER (SELECT * FROM....), da mesma tela em outro micro ele não atualiza... aí usei o Start Transaction e Commit para este SELECT aí funcionou...

 

Por isso q eu pergunto, tem q usar Commit nos SELECTs??

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quero que minha transação funcione, por exemploAo alterar um registro em uma máquina, o outro usuário de outra máquina deverá ver o registro atualizado e da forma como eu fiz no código acima ele não atualiza as informações, a não ser se eu der um COMMIT no SELECT tb, eu queria saber se isso é correto fazer, das COMMIT no SELECT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola

 

olha vi uma vez em um artigo, nao lembro onde, q mandava la no transaction editor marcar a opcao read committed e no quadro ao lado onde aparece

 

read_committed

rec_version

nowait

 

apagar a linha nowait, e isso ele mencionava qdo estivesse usando o sistema em rede.

 

espero q ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Calemar, A transação só será efetivada apos o comando Commit. Caso você não dê um Commit na sua transação (só der post) as auterações só estarão visiveis para os componentes (Query, Table) que estiverm ligados a ele no momento!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.