Ir para conteúdo
  • Cadastre-se

dev botao

Update em Query com LeftJoin


Ver Solução Respondido por xyberx,
  • Este tópico foi criado há 2484 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Pessoal, tenho duas tabelas:

pessoa (id, nome)
pessoa_fisica (id, cpf, id_pessoa)

Ligadas pela por uma chave estrangeira através de id_pessoa

Coloquei uma query no Zeos com um left join:

select p.nome, f.cpf 
from fisica f
left join pessoa p on p.id = f.id_pessoa

Porém quando eu altero um valor na query recebo um erro informando: cannot update a complex query with more than one table.

Qual seria a melhor forma de persistir objetos no banco? 

Link para o comentário
Compartilhar em outros sites

 Você não pode atualizar campos de duas tabelas distintas no mesmo SQL com left join, pode fazer isso com campo = Select campo from tabela) isso aceita, mais nao terá post para isso somente ExecSQL.

 Existem outras formas de fazer o que vc quer se ter o problema relatado.

Link para o comentário
Compartilhar em outros sites

5 minutos atrás, xyberx disse:

 Você não pode atualizar campos de duas tabelas distintas no mesmo SQL com left join, pode fazer isso com campo = Select campo from tabela) isso aceita, mais nao terá post para isso somente ExecSQL.

 Existem outras formas de fazer o que vc quer se ter o problema relatado.

Pois é, estou migrando para o Lazarus e fiquei triste com isso. Vi em um fórum que no Unidac e Firedac isso é possível.

Gostaria de saber como vocês que usam o Lazarus fazem.

Se criam uma query para cada tabela e sai dando o post em todas.

Imagine se eu der o post em pessoa, depois quando for dar em pessoa_fisica e der erro, preciso voltar em pessoa e cancelar as alterações.

Link para o comentário
Compartilhar em outros sites

  • Solution

 Para isso serve Transação, abrindo uma transação e todo o bloco de dados dentro dela, so dar um rollback que todos os dados inseridos nas outras tabelas vão simplesmente ser cancelados. Isso chama-se controle transacional.

 Dê uma olhada sobre isso pois existe em qualquer lugar não somente em Delphi. É de qualquer banco de dados relacional.

Editado por xyberx
Complemento faltante
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 06/07/2017 at 09:26, xyberx disse:

 Para isso serve Transação, abrindo uma transação e todo o bloco de dados dentro dela, so dar um rollback que todos os dados inseridos nas outras tabelas vão simplesmente ser cancelados. Isso chama-se controle transacional.

 Dê uma olhada sobre isso pois existe em qualquer lugar não somente em Delphi. É de qualquer banco de dados relacional.

Obrigado, vou fazer assim mesmo, é a melhor opção já que não vou ter a facilidade do firedac.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2484 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...