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 

Deletar Registros[RESOLVIDO]

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


Registrado: Quinta-Feira, 17 de Outubro de 2013
Mensagens: 404

MensagemEnviada: Qui Jun 22, 2017 2:53 pm    Assunto: Deletar Registros[RESOLVIDO] Responder com Citação

Pessoal, boa tarde!

Preciso deletar registros da tabela fornecedores, porém so posso deletar quando não houver registros de fk na tabela contasapagar

Alguem pode dar um exemplo?


Desde ja meu obrigado. Very Happy


Editado pela última vez por rogerioclaro2 em Ter Jul 04, 2017 3:42 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qui Jun 22, 2017 3:07 pm    Assunto: Responder com Citação

Como está com FK, uma opção seria fazer o delete em ambas as situações, uma vez que desde que banco não esteja configurado para Cascade Delete, será apresentado um erro impedindo a exclusão do registro do fornecedor, ai para não exibir um erro "estranho" para o usuário, você pode tratar esse erro na aplicação para exibir um erro apresentável ao usuário.

Outra opção seria fazer isso através de um IF, no SQL Server ficaria assim por exemplo:

Código:
IF NOT EXISTS(SELECT 1
                FROM dbo.Fornecedores
                     INNER JOIN dbo.ContasAPagar
                     ON Fornecedores.ID_Fornecedor = ContasAPagar.ID_Fornecedor
               WHERE Fornecedores.ID_Fornecedor = x)
BEGIN
  DELETE Fornecedores
  WHERE ID_Fornecedor = x
END
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rogerioclaro2
Experiente
Experiente


Registrado: Quinta-Feira, 17 de Outubro de 2013
Mensagens: 404

MensagemEnviada: Qui Jun 22, 2017 3:17 pm    Assunto: Responder com Citação

leo_cj escreveu:
Como está com FK, uma opção seria fazer o delete em ambas as situações, uma vez que desde que banco não esteja configurado para Cascade Delete, será apresentado um erro impedindo a exclusão do registro do fornecedor, ai para não exibir um erro "estranho" para o usuário, você pode tratar esse erro na aplicação para exibir um erro apresentável ao usuário.

Outra opção seria fazer isso através de um IF, no SQL Server ficaria assim por exemplo:

Código:
IF NOT EXISTS(SELECT 1
                FROM dbo.Fornecedores
                     INNER JOIN dbo.ContasAPagar
                     ON Fornecedores.ID_Fornecedor = ContasAPagar.ID_Fornecedor
               WHERE Fornecedores.ID_Fornecedor = x)
BEGIN
  DELETE Fornecedores
  WHERE ID_Fornecedor = x
END


Obrigado leo pela resposta..
a mensagem e tratada, preciso deletar somente os que não tem lançamentos.

Código:
 DELETE FROM fornecedor f
 WHERE not EXISTS (SELECT * FROM contapagar C
              WHERE c.fornecedor = f.codigo)


pensei em algo assim o que vocês acham
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qui Jun 22, 2017 3:24 pm    Assunto: Responder com Citação

Entendi, achei que era para implementar na tela quando o usuário clicasse para excluir um fornecedor.

Nessa situação, esse jeito que você está pensando em fazer é o que eu faria.
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