Try...Except...Raise StartTransation | Commit | RollBack

Delphi

05/12/2003

Gostaria de um bom exemplo de como usar estes comando

Try...Except...Raise + StartTransation | Commit | RollBack


Estou usando o FireBird e quero aplicar uma segurança boa na verificação da rede.

Obrigado


Jonnymarques

Jonnymarques

Curtidas 0

Respostas

Marcelo Saviski

Marcelo Saviski

05/12/2003

try
  faz alguma coisa que possa gerar erro;
except
  raise Exception.Create(´Erro´);
end



GOSTEI 0
Tnaires

Tnaires

05/12/2003

Olá

Minha sugestão (supondo q o nome do seu banco de dados seja BD, e q vc esteja usando BDE):

  BD.StartTransaction;  // Iniciar transação
  try
    // Grava as alterações
  except
    on E: Exception do
    begin
      ShowMessage(´Erro: ´ + E.Message); // Mostrar o erro
      DB.RollBack;
    end;
  end;
  BD.Commit;
  ShowMessage(´Sucesso...´);  // Informar ao usuário que tudo correu bem
  


Se vc tiver usando componentes ADO, os nomes dos métodos para o TADOConnection são semelhantes.

Sucesso...


GOSTEI 0
Tnaires

Tnaires

05/12/2003

Ops...
Caro jonny, o código que eu mandei está errado por um detalhezinho...
Depois do Rollback (dentro do bloco except), coloque um Exit pro programa sair da procedure, senão dá problema.
Ou então vc transefere o Commit pra dentro do bloco try.

Abraços


GOSTEI 0
Technos

Technos

05/12/2003

Amigo Tnaires...

Tb to com o mesmo problma do nosso amigo acima, só que eu to trabalhando com componentes IBO.

Pelo o que vi, o Starttransaction é executado exatamente na hora de gravar os dados na tabela nao é ?

Certo, o meu problema é um pouco diferente por que nao posso nem penssar em gravar os dados diretamente na tabela, pois é um prograva tipo PDV que antes de gravar os dados, vou ter que validar a senha do usuario, ou seja, essa validação vai ficar dentro do TRY que voce exemplificou acima, se nao validar a senha, darei um RollBack correto ?

Terei algum problema em utilizar o esboço criado por voce em um sistema assim ? trabalhando com 2 tabelas (mestre-detalhe)?

Poderia me exemplificar com esse esquema ?

Grato

Technos :P


GOSTEI 0
Tnaires

Tnaires

05/12/2003

Olá
Acredito q vc pode tranquilamente usar o código em questão da maneira q vc está pensando:
BD.StartTransaction;  // Iniciar transação 
  try 
    // Grava as alterações
    if UsuarioInvalido then
      raise Exception.Create(´Usuário Inválido.´);
    BD.Commit;
    ShowMessage(´Alterações efetuadas com sucesso.´);
  except 
    on E: Exception do 
    begin 
      DB.RollBack;
      ShowMessage(´Erro: ´ + E.Message); // Mostrar o erro 
    end; 
  end;

É o seguinte: suponha que vc valide seu usuário através da procedure UsuarioInvalido, que retorna false se o usuário for inválido. Então, a linha ´raise Exception.Create();´ cria uma exceção, que conduzirá o fluxo do programa para dentro do bloco except (onde ocorrerá cancelamento da transação corrente).
Espero ter respondido sua pergunta; qq coisa me acrescente ao MSN.


GOSTEI 0
POSTAR