FireDac MestreDetalhe Postgre
11/09/2015
0
Olá á Todos!
Caros,Estou á Dias, Tentando Fazer Um Mestre Detalhe Com Postgre e FireDac com CachedUpdates e Não Consigo! Gostaria da Ajuda de vocês Pois Não sei mais o que eu Faço!
Veja abaixo as configurações que Realizei:
São duas Querys:
1-UqInsereLancamento:
*SQL comand: select * from cartao_consumo_lancamento where id = :id
*CachedUpdates:=True;
2-UqInsereItensCartao:
*SQL comand:select * from cartao_consumo_lancamento_itens where id_cabecalho = :id
*ParamInput:ptInput
*DataType:ftInteger
*CachedUpdates:True;
*DetailFiels:id_cabecalho(nome do campo que está na tabela filho)
*IndexFieldNames:id_cabecalho
*MasterFields:ID ( chave primaria na tabela Pai)
*MasTerSource:DsLancamento(nome do DataSource ligado ao UqInsereLancamento)
*SchemaAdapter:fds_principal
No Evento AfterApplyUpdates do SchemaAdapte eu Coloquei:
UqInsereLancamento.CommitUpdates();
UqInsereItensCartao.CommitUpdates();
Para Inserir o Cabeçalho eu Coloquei:
//1-Insere o Cabeçalho Primeiro...
With DM.UqInsereLancamento5 do
Begin
Open();
Append;
DM.UqInsereLancamento5.FieldByName('id_checkin').Value := Dm.UqVerifaCheckin2id.Value;
DM.UqInsereLancamento5.FieldByName('id_atendente').Value := 0;
DM.UqInsereLancamento5.FieldByName('sub_total').Value := 0;
DM.UqInsereLancamento5.FieldByName('hora').Value := 0;
DM.UqInsereLancamento5.FieldByName('desconto').Value := 0;
DM.UqInsereLancamento5.FieldByName('acrescimo').Value := 0;
DM.UqInsereLancamento5.FieldByName('total').Value := 0;
vcabecalhoinserido := True;
End;
Para Inserir os Itens eu Coloquei:
//2-Depois Insere Os Itens Do Cabeçalho
With DM.UqInsereItensCartao do
Begin
Open;
Append;
FieldByName('id_produto').Value := Dm.UqPesquisaProdutoid.Value;
FieldByName('nome_produto').Value := Dm.UqPesquisaProdutodescricao.Value;
FieldByName('quantidade').Value := EdtQuant.Value;
FieldByName('valor_unitario').Value := EdtVlrUnit.Value;
FieldByName('valor_total').Value := EdtVlrTotal.Value;
FieldByName('obs').Value := '';
FieldByName('und').Value := EdtUnd.Text;
Post;
LimpaEditsVenda;
EdtCodProd.SetFocus;
End;
e No Botão Gravar Coloquei:
//executa o applyupdates no schemme adapter para aplicar as alterações nas duas querys
Dm.fds_principal.ApplyUpdates(0);
DM.UqInsereLancamento.Refresh;
DM.UqInsereItensCartao.Refresh;
Porém Ele da esse Erro na hora de inserir o Registro:
Cannot process - no parent row. Constraint
Não sei Mais o que eu Faço Alguém tem uma luz????
Caros,Estou á Dias, Tentando Fazer Um Mestre Detalhe Com Postgre e FireDac com CachedUpdates e Não Consigo! Gostaria da Ajuda de vocês Pois Não sei mais o que eu Faço!
Veja abaixo as configurações que Realizei:
São duas Querys:
1-UqInsereLancamento:
*SQL comand: select * from cartao_consumo_lancamento where id = :id
*CachedUpdates:=True;
2-UqInsereItensCartao:
*SQL comand:select * from cartao_consumo_lancamento_itens where id_cabecalho = :id
*ParamInput:ptInput
*DataType:ftInteger
*CachedUpdates:True;
*DetailFiels:id_cabecalho(nome do campo que está na tabela filho)
*IndexFieldNames:id_cabecalho
*MasterFields:ID ( chave primaria na tabela Pai)
*MasTerSource:DsLancamento(nome do DataSource ligado ao UqInsereLancamento)
*SchemaAdapter:fds_principal
No Evento AfterApplyUpdates do SchemaAdapte eu Coloquei:
UqInsereLancamento.CommitUpdates();
UqInsereItensCartao.CommitUpdates();
Para Inserir o Cabeçalho eu Coloquei:
//1-Insere o Cabeçalho Primeiro...
With DM.UqInsereLancamento5 do
Begin
Open();
Append;
DM.UqInsereLancamento5.FieldByName('id_checkin').Value := Dm.UqVerifaCheckin2id.Value;
DM.UqInsereLancamento5.FieldByName('id_atendente').Value := 0;
DM.UqInsereLancamento5.FieldByName('sub_total').Value := 0;
DM.UqInsereLancamento5.FieldByName('hora').Value := 0;
DM.UqInsereLancamento5.FieldByName('desconto').Value := 0;
DM.UqInsereLancamento5.FieldByName('acrescimo').Value := 0;
DM.UqInsereLancamento5.FieldByName('total').Value := 0;
vcabecalhoinserido := True;
End;
Para Inserir os Itens eu Coloquei:
//2-Depois Insere Os Itens Do Cabeçalho
With DM.UqInsereItensCartao do
Begin
Open;
Append;
FieldByName('id_produto').Value := Dm.UqPesquisaProdutoid.Value;
FieldByName('nome_produto').Value := Dm.UqPesquisaProdutodescricao.Value;
FieldByName('quantidade').Value := EdtQuant.Value;
FieldByName('valor_unitario').Value := EdtVlrUnit.Value;
FieldByName('valor_total').Value := EdtVlrTotal.Value;
FieldByName('obs').Value := '';
FieldByName('und').Value := EdtUnd.Text;
Post;
LimpaEditsVenda;
EdtCodProd.SetFocus;
End;
e No Botão Gravar Coloquei:
//executa o applyupdates no schemme adapter para aplicar as alterações nas duas querys
Dm.fds_principal.ApplyUpdates(0);
DM.UqInsereLancamento.Refresh;
DM.UqInsereItensCartao.Refresh;
Porém Ele da esse Erro na hora de inserir o Registro:
Cannot process - no parent row. Constraint
Não sei Mais o que eu Faço Alguém tem uma luz????
Josias Araújo
Curtir tópico
+ 0
Responder
Post mais votado
17/08/2016
Bom dia, Josias!
Também quebrei a cabeça utilizando FireDAC em modo CachedUpdate ativo.
O que me ajudou bastante foi um vídeo do Alan Gomes:
http://alan-gomes.blogspot.com.br/2013/04/firedac-cadastro-mestredetalhe.html
Mas há um detalhe quando vc estiver construindo sua aplicação: SEMPRE, antes de fazer o Append no DataSet "Filho", faça um POST e depois EDIT no DataSet "Pai". Caso contrário, o erro será sempre o mesmo.
Deve existir uma forma melhor de se fazer isto, mas foi o que consegui até agora.
Luis Paulo Rodrigues
Também quebrei a cabeça utilizando FireDAC em modo CachedUpdate ativo.
O que me ajudou bastante foi um vídeo do Alan Gomes:
http://alan-gomes.blogspot.com.br/2013/04/firedac-cadastro-mestredetalhe.html
Mas há um detalhe quando vc estiver construindo sua aplicação: SEMPRE, antes de fazer o Append no DataSet "Filho", faça um POST e depois EDIT no DataSet "Pai". Caso contrário, o erro será sempre o mesmo.
Deve existir uma forma melhor de se fazer isto, mas foi o que consegui até agora.
Luis Paulo Rodrigues
Luis Rodrigues
Responder
Mais Posts
02/07/2022
Wilson Pereira
Bom dia, Josias!
Também quebrei a cabeça utilizando FireDAC em modo CachedUpdate ativo.
O que me ajudou bastante foi um vídeo do Alan Gomes:
http://alan-gomes.blogspot.com.br/2013/04/firedac-cadastro-mestredetalhe.html
Mas há um detalhe quando vc estiver construindo sua aplicação: SEMPRE, antes de fazer o Append no DataSet "Filho", faça um POST e depois EDIT no DataSet "Pai". Caso contrário, o erro será sempre o mesmo.
Deve existir uma forma melhor de se fazer isto, mas foi o que consegui até agora.
Luis Paulo Rodrigues
Também quebrei a cabeça utilizando FireDAC em modo CachedUpdate ativo.
O que me ajudou bastante foi um vídeo do Alan Gomes:
http://alan-gomes.blogspot.com.br/2013/04/firedac-cadastro-mestredetalhe.html
Mas há um detalhe quando vc estiver construindo sua aplicação: SEMPRE, antes de fazer o Append no DataSet "Filho", faça um POST e depois EDIT no DataSet "Pai". Caso contrário, o erro será sempre o mesmo.
Deve existir uma forma melhor de se fazer isto, mas foi o que consegui até agora.
Luis Paulo Rodrigues
Muito obrigado Luís Paulo, por compartilhar. Ajudou de mais. Inclusive, reforcei a solução (obtida a partir dessa sua dica) neste link https://www.devmedia.com.br/forum/firedac-master-detail/613368
Responder
Clique aqui para fazer login e interagir na Comunidade :)