Celamar 0 Denunciar post Postado Junho 24, 2005 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
hhmelina 0 Denunciar post Postado Junho 24, 2005 Bom dia!!!!O q você está querendo fazer??? Inserir no banco, salvar???Beijos...Mel Compartilhar este post Link para o post Compartilhar em outros sites
Celamar 0 Denunciar post Postado Junho 24, 2005 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
hhmelina 0 Denunciar post Postado Junho 27, 2005 Bom eu sempre dei o commit assim e nunca deu problema...Espero q de certo para você tbm...Bom dia...Beijos...Mel ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
skywards 1 Denunciar post Postado Junho 27, 2005 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
PabloPB 0 Denunciar post Postado Julho 6, 2005 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
PabloPB 0 Denunciar post Postado Julho 6, 2005 Descupe-me!!!...Celemar. Compartilhar este post Link para o post Compartilhar em outros sites