FireDAC - Master Detail
28/11/2020
0
Estou usando Delphi 10.2 + FireDAC + Cached Updates + MasterDetail
Fiz todas as configurações necessárias..
Master
CachedUpdate = True
SchemaAdapter
Detail
CachedUpdate = True
FetchOptions (Detail Cascade = True)
IndexFieldNames (Chave Detail)
MasterFields (Chave Master)
MasterSource (DataSource Master)
SchemaAdapter
SchemaAdapter
ApplyUpdates(-1)
Master.CommitUpdates
Detail.CommitUpdates
Porem apresenta esse erro: [FireDAC][DatS]-16. Cannot process - no parent row. Constraint [ForeignKeyConstraint].
Se eu incluir na master (der um POST), e depois incluir na detail, funciona, mas sai do Objetivo de "Cache"
Fiz todas as configurações necessárias..
Master
CachedUpdate = True
SchemaAdapter
Detail
CachedUpdate = True
FetchOptions (Detail Cascade = True)
IndexFieldNames (Chave Detail)
MasterFields (Chave Master)
MasterSource (DataSource Master)
SchemaAdapter
SchemaAdapter
ApplyUpdates(-1)
Master.CommitUpdates
Detail.CommitUpdates
Porem apresenta esse erro: [FireDAC][DatS]-16. Cannot process - no parent row. Constraint [ForeignKeyConstraint].
Se eu incluir na master (der um POST), e depois incluir na detail, funciona, mas sai do Objetivo de "Cache"
Gabriel Kenji
Curtir tópico
+ 0
Responder
Posts
30/11/2020
Gabriel Kenji
Estou usando Delphi 10.2 + FireDAC + Cached Updates + MasterDetail
Fiz todas as configurações necessárias..
Master
CachedUpdate = True
SchemaAdapter
Detail
CachedUpdate = True
FetchOptions (Detail Cascade = True)
IndexFieldNames (Chave Detail)
MasterFields (Chave Master)
MasterSource (DataSource Master)
SchemaAdapter
SchemaAdapter
ApplyUpdates(-1)
Master.CommitUpdates
Detail.CommitUpdates
Porem apresenta esse erro: [FireDAC][DatS]-16. Cannot process - no parent row. Constraint [ForeignKeyConstraint].
Se eu incluir na master (der um POST), e depois incluir na detail, funciona, mas sai do Objetivo de "Cache"
Fiz todas as configurações necessárias..
Master
CachedUpdate = True
SchemaAdapter
Detail
CachedUpdate = True
FetchOptions (Detail Cascade = True)
IndexFieldNames (Chave Detail)
MasterFields (Chave Master)
MasterSource (DataSource Master)
SchemaAdapter
SchemaAdapter
ApplyUpdates(-1)
Master.CommitUpdates
Detail.CommitUpdates
Porem apresenta esse erro: [FireDAC][DatS]-16. Cannot process - no parent row. Constraint [ForeignKeyConstraint].
Se eu incluir na master (der um POST), e depois incluir na detail, funciona, mas sai do Objetivo de "Cache"
Enviei um e-mail para o responsável da Embarcadero, ele falo pra eu tentar atualizar o Delphi.
Sai do Delphi 10.2 e fui para o Delphi 10.3.3 (Rio) e adivinha? funcionou perfeitamente.
O mesmo fonte, funcionou no 10.3.3.. caso tenham esse erro, atualize que funciona..
Responder
01/07/2022
Wilson Pereira
Passei pela mesma situação e depois de 3 horas de pesquisa, tentativa e erro, testei a solução do link a seguir (Salvar e Editar) e Funcionou!!! https://www.devmedia.com.br/forum/firedac-mestredetalhe-postgre/531378 Então notei que no final das contas o problema era tentar dar um AppyUpdates com as duas Queryes (através do SchemaAdapter) com Chaves Temporárias (como o -1) que o Firedac cria. Ou seja, por estar em cache, o Firedac não "advinha" o próximo número número e tenta salvar com o "-1", logo dá este erro. Mas ao salvar primeiro o Mestre, já obtém o número correto do autoincremento e replica no Detalhe. Assim sendo, exatamente antes de salvar o Detalhe, adicionei esta linha de código "If QueryMestre.State IN [dsInsert, dsEdit] Then QueryMestre.Post();". E agora sim. Às 23:57 e morto de cansado, vou dormir tranquilo!
Responder
Clique aqui para fazer login e interagir na Comunidade :)