Como excluir dados através de um botão de outro Jframe

Criei o método excluir para cada JtabedPanne(aba) de um frame no qual possui dados cadastrais diferentes , porém pretendo excluir todos de uma vez só através de um único botão Excluir , porem para aperta esse botão primeiro eu seleciono um dos clientes que devo excluir e depois clico no botão .
estou tentando através de um id , pois cada aba possui uma tabela no banco de dados e possui chave estrangeira
estou fazendo da seguinte maneira
clientes.setId(Integer.parseInt(TelaCadastroCliente.txtId.getText()));
anamnese.setIdAnamnese(Integer.parseInt(TelaCadastroCliente.txtId.getText()));
aqui eu chamo a classe do cliente que quero excluir com id dele e chamo o outro frame que é o TelaCadastroCliente e pego o ID dele em um campo de texto
e o anamnese que é o de baixo é referente a outra aba , fiz um trycatch e ele executa porem não apaga e não da erro

na sequência chamo também o método de cada um. Alguém teria alguma dica de como poderia fazer

Acredito que fiz confusão na hora de explicar, irei reformular:

Tendo seu banco de dados, onde a tabela “cliente” esteja enviado a forein key para tabela “ficha_anamnese”, você pode dentro da própria jFrame1 excluir todas as informações tanto do cliente (não recomendável) como de suas informações na fichaAnamnese, seguindo essa etapa abaixo:

  1. Após pesquisar o cliente na jFrame1, coloque seu ID no jTextField_ID;
  2. Forneça as opções a serem tratadas.
  3. Ao clicar em “excluir cliente” na jFrame1 o botão chamará os seguintes métodos:
    3.1 Pesquisar a FK_CLIENTE na tabela fichaAnamnese através da ID do cliente;
    3.2 Excluir todas informações deste cliente na fichaAnamnese (Ex: Where FK_cliente = 1);
    1.3 Excluir todas informações do cliente através do ID_cliente .
Ideia Complementar

Se você cria seu cliente como TABELA PAI, atribuindo a demais tabelas sua FOREIN_KEY, no caso de ter necessidade em excluir alguma ficha anamnese dele, ficará muito mais simples.
Uma vez que já tendo a ID dele, basta filtrar na tabela “ficha anamnese” com o método ‘WHERE’ para deletar essas informações.

1 curtida

Então Henrique as tabelas possui uma relação de foreing Key , então tentei dessa forma criei o método pegando diretamente o id do cliente para poder excluir todos os dados relacionados a que seria a tabela cliente e a anamnese porém ele da um erro de foreing Key , aí no caso se não tiver nenhum dado na tabela anamnese ele exclui normal agora se tiver e eu tentar deletar ele da esse erro de foreing Key

Então Henrique as tabelas possui uma relação de foreing Key , então tentei dessa forma criei o método pegando diretamente o id do cliente para poder excluir todos os dados relacionados a que seria a tabela cliente e a anamnese porém ele da um erro de foreing Key , aí no caso se não tiver nenhum dado na tabela anamnese ele exclui normal agora se tiver e eu tentar deletar ele da esse erro de foreing Key

Se precisar fazer exclusão de tabelas vinculadas, primeiro se deve exclui os dados da tabela FILHO (que é quem recebe a FK) para depois excluir da tabela PAI (pois este está fazendo referência para a FILHO),.
Tu pode setar os dois métodos (desde que seguidos corretamente um do outro) dentro do mesmo evento de exclusão.

1 curtida

Opa boa vou tentar , no caso então da tabela filho o correto seria usar o id foreing Key que liga ela a tabela pai pra efetuar a exclusão ou o id auto increment dela mesmo ?

Tabela PAI :
TABLE CLIENTE
(
ID_CLIENTE INT NOT NULL
NOME_CLIENTE VARCHAR(255) NOT NULL
)

Tabela FILHO:
TABLE RELATORIO
(
ID_RELATORIO INT NOT NULL
DESC_RELATORIO VARCHAR(500) NOT NULL
FK_CLIENTE INT NOT NULL
)

Supondo que as duas tabelas possuem os dados:
TABLE CLIENTE
(1, “JOSÉ”)

TABLE RELATORIO
(1,“O PACIENTE TEM ALERGIA A DIPIRONA”, 1)

Acabamos de fazer uma relação, onde a tabela PAI (Cliente) tem cadastrado sua ID na tabela filho . A tabela FILHO por sua vez relata que : no relatório ID( 1) o paciente FK_ID( 1 ) tem alergia a medicamento.

Até aqui entendeu ?

Agora supondo que necessitamos excluir este relatório, qual seria o processo correto?

  1. Capturar a FK_ID(1) pesquisando essa ID na tabela PAI (cliente)
    Exemplo : SELECT ID_CLIENTE FROM CLIENTE WHERE NOME_CLIENTE = ‘José’.
  2. Setaremos este resultado (ID_CLIENTE) em “relatorio.setFKcliente()”;

Agora que obtivemos a ID do cliente cujo relatório deverá ser excluído, vamos excluir o relatório com base no FK_CLIENTE. Ficando:

  1. DELETE*FROM RELATORIO WHERE FK_CLIENTE = 1;

Por que excluímos o relatório com base em sua coluna foreing Key e não em sua ID?
Supondo que Você realizou 2 cadastros de cliente e o primeiro (ID 1) não foi feito relatório algum, mas no segundo cliente ( ID 2 ) foi feito. Sabe oq acontece? Os dados da nossa tabela RELATORIO ficaram assim:
TABLE RELATORIO
(1, “O PACIENTE TEM ALERGIA A DIPIRONA”,2)

Por este motivo deve-se excluir os dados da tabela filho de acordo com a ID da tabela PAI, pois a ID_RELATORIO (1) não será do paciente ID(1) e sim do paciente ID(2) .

No caso de você tentar excluir a tabela PAI (CLIENTE) direto, o que vai acontecer?
Se essa não tiver nenhum cadastro na tabela FILHO (RELATORIO) então será excluída sem problema.
Mas se essa tiver cadastro na tabela FILHO (RELATORIO) o banco de dados acusará um erro.

Este erro faz sentido, pois pensa comigo… Como você excluírá o seu cliente e terá no banco de dados um relatório fazendo referência para este cliente excluído ?

Compreende agora?

Resposta final:
Quero excluir minha tabela PAI, mas ela possui uma tabela filho, o que devo fazer?
Excluir primeiro qualquer informação da tabela FILHO que tenha referência com a tabela PAI para depois sim você excluir a tabela PAI.

Henrique muito obrigado pela explicação ficou perfeita o erro era esse mesmo estava tentando excluir o cliente primeiro sem antes excluir a anamnese ou seja tentando excluir a tabela pai primeiro ao invéz da filho , aí alterei coloquei pra excluir primeiro a tabela filho atravéz da sua foreing Key que é a que faz ligação a tabela pai e funcionou muito obrigado pela explicação estava batendo a cabeça aqui achando que era algum codigo errado e era só as posições

1 curtida

Só estou com problema na hora de salvar todos eles que dá esse erro também de foreing Key , quando tento salvar na primeira vez aí da o erro aí se eu fechar a janela e voltar pra salvar de novo aí ele salva

Eai @brunomartins , fico feliz que tenho te ajudado.

Com relação ao INSERT que tal imaginarmos a situação ao contrária? Você conseguiria preencher os dados de um relatório se o cliente não tiver sido criado? Como você iria referenciar ele se este ainda “não existisse”?

  • Precisa-se primeiro criar o cliente para depois referenciar ele através de sua ID na tabela filho.