ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Rotina segura para exclusão

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
fdsilva.desenv
Novato
Novato


Registrado: Quarta-Feira, 28 de Novembro de 2012
Mensagens: 68

MensagemEnviada: Qui Nov 30, 2017 2:06 pm    Assunto: Rotina segura para exclusão Responder com Citação

Prezados, boa tarde.

Tenho a seguinte estrutura de tabelas:

EntradaNF - Tabela Pai
ItmEntradaNF - Tabela Filha atrelada a Tabela Produtos e a EntradaNF

Por exemplo, acontece que algumas vezes, ao excluir uma nota fiscal, no meio das exclusões de itens, algum item pode dar problema na hora da exclusão por N motivos, atrapalhando o calculo do estoque_atual na Tabela de Produtos, dando falha no processo de exclusão da nota por inteira e perdendo assim a confiabilidade.

Isso porque faço de forma separada as exclusões (utilizando duas querys):
1 Query - Seleciono todos os itens da nota fiscal e faço a exclusão um a um atualizando o estoque do produto.
2 Query - Seleciono a nota fiscal em questão (já sem os itens, na tabela EntradaNF) e faço a exclusão dela.

Gostaria de saber se alguém possui uma forma de exclusão mais segura, ou seja, caso dê algum problema em um dos itens no processo de exclusão, eu possa dar uma mensagem de erro e dar um rollback em todo o processo que foi feito até o erro (ou seja, nas exclusões dos itens anteriores que ocorreram com sucesso).

Preciso dar confiança no sistema, mostrando que, ou ele faz o processo como um todo, ou as informações voltam como estavam antes da tentativa de exclusão.

Obs.: Utilizo o banco SQL SERVER 2008 e Delphi 7.

Obrigado pela atenção.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Nov 30, 2017 7:11 pm    Assunto: Responder com Citação

Boa noite,

Depende um pouco do componente que você está utilizando para acesso ao banco de dados, mas a idéia seria utilizar transação mesmo, dentro de um bloco try /except / end para executar o Commit se não ocorrer erros ou o Rollback. Ex:

Código:
StartTransaction ou BeginTransaction
try
    Exclusoes
    Commit;
except
    Rollback;
    Mensagem de erro
end;


Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!gopouva-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB