FDQuery atualizando só alguns campos

13/11/2023

0

Olá, pessoal
Resumidamente, tenho no meu BD Firebird uma tabela PESSOA e outra tabela ESTADO, bem como um componente FDQuery, no Delphi, que tem o comando abaixo:
SELECT ID, TIPO, NOME, CNPJCPF, RAZAO, CEP, ENDERECO, NUMERO, COMPLEMENTO, BAIRRO, E.NOME AS ESTADO, E.ID AS ID_ESTADO, FROM PESSOA AS P INNER JOIN ESTADO AS E ON E.ID = P.ID_ESTADO

(Tem também a tabela de município com a mesma lógica mas simplifiquei para deixar mais simples)
A questão é que consigo ler e atualizar os dados dessa query, exceto pelo campo ID_ESTADO. Ele é até lido, mas não consigo fazer um Post de forma que ele seja gravado. E a propriedade readOnly desse campo está em False (curiosamente veio como true).
Alguma luz do que pode estar impedindo a sua atualização?
André Duarte

André Duarte

Responder

Posts

13/11/2023

Arthur Heinrich

Talvez o componente esteja interpretando que este resultado é "principalmente" da tabela PESSOA. Todas as colunas que não são da tabela PESSOA provavelmente apresentam o mesmo problema.

Se você quer fazer a atualização via grid, com múltiplas tabelas envolvidas, provavelmente terá que escrever o código que faça o update correspondente a cada tabela, separadamente.
Responder

13/11/2023

André Duarte

Talvez o componente esteja interpretando que este resultado é "principalmente" da tabela PESSOA. Todas as colunas que não são da tabela PESSOA provavelmente apresentam o mesmo problema.

Se você quer fazer a atualização via grid, com múltiplas tabelas envolvidas, provavelmente terá que escrever o código que faça o update correspondente a cada tabela, separadamente.


A ideia vai ser atualizar um campo por vez, embora haja um DBGrid listando. Inclusive coloquei as tabelas ESTADO e MUNICIPIO naquele DropDownList que puxa os campos de 2 datasets simultâneos, um da respectiva tabela e outro da query. Eles listam corretamente os estados e cidades pelo nome.

Em último caso usarei um FDCommand setando manualmente estes campos após o post do FBQuery principal, na linha do que vc falou acima.

Obrigado pela resposta!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar