Ir para conteúdo
Fórum Script Brasil
  • 0

Deletar dados do banco


dan_visualdm

Pergunta

olá pessoal, bom dia!

estou precisando fazer o seguinte.

vamos supor que na minha tabela tbl_hospedados eu tenha um campo que pode receber somentes os valores A, B , C, D

tudo bem, está gravando e funcionando tudo certinho...

o Problema é: vamos supor que eu tenha 30 cadastros para D e quero apagar todos eles do banco... ao invés de ficar deletando um por um, gostaria de fazer um delete coletivo (hehehe!)...

como fazer isso?

outro problema também com isso de deletar, quando trabalho com Mestre / Detalhes...

Vamos supor que eu delete um cadastro da mestre.. e dai os cadastros do Detalhs.. vai ficar perdido?? (pois não vao estar mais ligado com nignuem).. como resolver isso? como deletar esses dados do detalhes tb?

Meu BD é ACCESS e uso ADO pra conectar....

abraços...

obrigado

Editado por dan_visualdm
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

dan_visualdm, voce pode usar a instrução DELETE do SQL para faze isto. Noo caso do Access, ficaria algo como:

delete *
from tbl_hospedados where campo = 'D'
entretanto, como você disse, há necessidade de excluir os registros filhos antes do pai, do contrário a integridade referencial fica furada! Voce poderia faze um combinação de instrução SELECT com DELETE. Constrói uma consulta SELECT com a tabela "pai" para obter os dados a excluir. Depois, usa o campo de referência desta consulta para passar como parâmetro para o dataset com o DELETE, que eliminará os "filhos". Excluidos os filhos, você pode excluir o pai. Voce não informou, então, vamos supor que o campo de referência em ambas chama-se Codigo. nas consulta do pai:
select Codigo
from tbl_hospedados where campo = 'D'
isto retornará todos os códigos dos registros que deverão ser excluídos.
delete *
from tbl_filha where Codigo = :Codigo
esta instrução SQL irá apagar todos os registros dos filhos de código passado como parâmetro.
...
ADOQueryPai.Open;
while not ADOQueryPai.EOF do
begin
  ADOQueryFilho.Parameters.ParamByName('Codigo').Value := ADOQueryPai.FieldByName('Codigo').AsInteger;
  ADOQueryFilho.ExecSQL;
  ADOQueryPai.DeleteRecords(arCurrent);  // ou a seguinte
//  ADOQueryPai.Delete;
end;
ADOQueryPai.Close;
...

não usamos o ADOQueryPai.Next dentro do while, porque ao excluir o registro atual, automaticamente estaremos processando o próximo.

A idéia seria mais ou menos esta, qualquer dúvida avise. E não esqueça de fazer um backup da base antes dos testes. ;)

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...