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

Problema em fazer um UPDATE


Edson Machado

Pergunta

Olá Galera...

estou com o seguinte problema, tenho duas tabelas no BD, tabela Cliente onde tem uma chave estrangeria (endereco_id), que recebe o id da tabela endereco, fiz a visualização juntando as duas tabela com INNER JOIN, deu muito certo até em recuperar os dados em um form de edição, porem agora, não consigo fazer o UPDATE, simultaneo, ou seja, quando alterar os dados do cliente, que tambem se preciso, altere os dados da segunda tabela (endereco).

alguém pode me ajudar?

grato forte abraço a todos.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Use storage procedure.

Segue abaixo um exemplo de um CRUD para prestadores(médicos) e suas especialidades.

Demais campos usados nestas tabelas foram suprimidos deste exemplo.

Prestador e especialidade se relacionam em muitos para muitos através da tabela prestador_especialidade.

O campo ação deve ser I ou A ou E, respectivamente para Inclusão, Alteração e Exclusão.

O campo pidPrestador deve ser preenchido com 0 para Inclusão e com o ID do prestador para as demais ações.

use assim:

CALL prestador_crud("I", 0, "nomedomedico");

A resposta vem em um select que você pode usar normalmente;

Espero que seja útil

DELIMITER $$

USE `sase`$$

DROP PROCEDURE IF EXISTS `prestador_crud`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `prestador_crud`(IN Acao CHAR(1), IN pidPrestador INTEGER, IN pnmPrestador VARCHAR(50),  
   IN pidEspecialidade INTEGER)
BEGIN
   DECLARE ppnmEspecialidade VARCHAR(50); -- usado para testar se especialidade medica está previaemte cadastrada
   DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem";
   DECLARE excecao SMALLINT DEFAULT 0;
   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1;
   
   SELECT nmEspecialidade INTO ppnmEspecialidade FROM especialidade WHERE idEspecialidade = pidEspecialidade;
   IF ppnmEspecialidade IS NULL THEN
      SET excecao = 1;
      SET msg = "MySQL: Erro: não Localizei Especialidade ao Gravar Medico/Prestador";
   END IF;

   IF pnmPrestador = "" OR (Acao <> "I" AND pidPrestador = 0) THEN
   -- os demais campos já foram validados pelo programa antes de entrar nesta peocedure
      SET msg = "MySQL: Erro na passagem de parametros";
      SET excecao = 1;
   ELSE
      START TRANSACTION;
      /*Inclusao de Medico/Prestador*/
      IF Acao = "I" THEN
         INSERT INTO prestador(nmPrestador)
         VALUES (pnmPrestador);
         IF excecao <> 1 THEN
            SELECT DISTINCT LAST_INSERT_ID() INTO @ppidPrestador FROM prestador;
         ELSE   
            SET msg = "MySQL: Erro ao inserir na tabela de prestador";
            ROLLBACK;
         END IF;
      END IF;
      IF excecao <> 1 THEN
         IF Acao <> "I" THEN
            SET @ppidPrestador = pidPrestador;
            DELETE FROM prestador_especialidade WHERE idPrestador = @ppidPrestador;
            IF excecao = 1 THEN
               SET msg = CONCAT("MySQL: Erro ao excluir prestador_especialidade. Acao = \"", Acao, "\" Prestador = ", pidPrestador);
               ROLLBACK;
            END IF;
         END IF;
         /*Alteracao de Medico/Prestador*/
         IF Acao = "A" THEN
            UPDATE prestador
            SET nmPrestador = pnmPrestador
            WHERE idPrestador = @ppidPrestador;
            IF excecao = 1 THEN
               SET msg = "MySQL: Erro ao atualizar prestador";
               ROLLBACK;
            END IF;
         END IF;
      END IF;
      IF excecao <> 1 AND Acao <> "E" THEN
         INSERT INTO prestador_especialidade(idPrestador, idEspecialidade)
         VALUES(@ppidPrestador, pidEspecialidade);
         IF excecao = 1 THEN
            SET msg = "MySQL: Erro ao inserir em prestador_especialidade na inclusao/alteracao de prestador";
            ROLLBACK;
         END IF;
      END IF;
      /*Exclusao de Medico/Prestador*/
      IF excecao <> 1 THEN
         IF Acao = "E" THEN
            DELETE FROM prestador
            WHERE idPrestador = pidPrestador;
            IF excecao = 1 THEN
               SET msg = "MySQL: Erro ao excluir Medico/Prestador";
               ROLLBACK;
            END IF;
         END IF;
      END IF;
   END IF;
   /*Se tudo deu certo, ent?o finaliza confirmando a grava??o.*/
   IF excecao <> 1 THEN
      COMMIT;
      IF Acao = "I" THEN
         SET msg = "MySQL: Medico/Prestador Incluido com sucesso";
      ELSE
         IF Acao = "A" THEN
            SET msg = "MySQL: Medico/Prestador Alterado com sucesso";
         ELSE
            SET msg = "MySQL: Medico/Prestador Excluido com sucesso";
         END IF;
      END IF;
   END IF;
   SELECT msg AS msg;
END$$

DELIMITER ;

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 03/03/2018 at 18:14, Edson Machado disse:

Olá Galera...

estou com o seguinte problema, tenho duas tabelas no BD, tabela Cliente onde tem uma chave estrangeria (endereco_id), que recebe o id da tabela endereco, fiz a visualização juntando as duas tabela com INNER JOIN, deu muito certo até em recuperar os dados em um form de edição, porem agora, não consigo fazer o UPDATE, simultaneo, ou seja, quando alterar os dados do cliente, que tambem se preciso, altere os dados da segunda tabela (endereco).

alguém pode me ajudar?

grato forte abraço a todos.

Boa tarde,

 

Essa sua chave estrangeira provavelmente está como NO ACTION em relação ao update.

Voce tem que trocar para CASCATE.

 

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,5k
×
×
  • Criar Novo...