Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

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? 

Postado
4 minutos atrás, Juliomar Marchetti disse:

Boa tarde

tente alterar as opções dos fields para não fazer parte do insert e update 

Mas eu preciso que eles pertençam ao insert e update :-)

Postado

 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.

Postado
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.

  • Solution
Postado (editado)

 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
Postado
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.

  • Este tópico foi criado há 2689 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.