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

05/12/2003

7

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


Responder

Posts

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



Responder

07/12/2003

Tnaires

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...


Responder

07/12/2003

Tnaires

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


Responder

16/02/2005

Technos

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


Responder

17/02/2005

Tnaires

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.


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar