Fórum falha na gravação do Mestre-Detalhe #386753

21/09/2010

0

Pessoal, tô c/ um "probleminha" estranho em um relacionamento MESTRE-DETALHE tradicional. Tô usando a "famosa" combinação sqlDataSet/Provider/clientDataSet ... O mais "dificil" eu conseguí, pois o relacionamento tá funcionando perfeitamente bem, o problema é q qdo excluo ou incluo algo no Detail por exemplo ... Na hora até aparece ... mas qdo dou um ApplyUpdates no Client (Master), fecho e abro o form ... não grava no banco !!!
Tô usando Delphi 7 e Firebird.
Ricardo Santos

Ricardo Santos

Responder

Posts

21/09/2010

Eduardo Marcolongo

Vc esta dando applyupdates no detail ?
Responder

Gostei + 0

21/09/2010

Eriley Barbosa

Ta mas no dataset detalhe você tem que ter um parâmetro que busque o dado de relacionamento no Dataset Mestre. Veja um artigo: http://siegmar.com.br/universo/LPIV/ExemploDBXMDI.pdfOu Usar master source, veja um artigo: https://www.devmedia.com.br/post-6474-Formulario-Mestre-Detalhes-com-DBExpress-e-Firebird.html
Responder

Gostei + 0

21/09/2010

Leandro Carvalho

Salvando algum item na tabela detalhe tu vai salvar chamando a tabela detalhe e logo após dar um ApplyUpdates. Exemplo:
 Na minha tabela de Pedido tenho a tabela PedidoItens, no botão salvar do item chamo:
 CDSPedido.Post;
 e logo após no evento AfterPost da CDSPedido tem-se:
 If CDSPedido.ChangeCount > 0 then
 begin
  SQLCCeramica.StartTransaction(TDPedido);
  Try
   CDSPedido.ApplyUpdates(0);
   SQLCCeramica.Commit(TDPedido);
  Except
   SQLCCeramica.Rollback(TDPedido);
   Application.Messagebox('Erro durante a gravação de dados !',
    'Erro', Mb_Ok + Mb_IconError);
  end;
 end;


 Na exlusão de algum item tu chama:
 CDSItemPedido.Delete;


Tente desta forma.
Qualquer coisa estamos ai.

Responder

Gostei + 0

21/09/2010

Leandro Carvalho

Só corrigindo a primeira linha:
Salvando algum item na tabela detalhe tu vai salvar chamando a tabela mestre e logo após dar um ApplyUpdates.
Responder

Gostei + 0

22/09/2010

Ricardo Santos

NOSSA !!! rsrsrs ... Pessoal, desde já ... Quero agradecer a PRONTIDÃO de vcs em responderem "prontamente" ... Pessoal, pra falar a verdade, tô c/ TANTAS outras prioridades, q nem ontem (21-09-10) e muito provavelmente hj (22-09-10), não vou ter tempo de "testar" as soluções propostas, mas só pra CONSTAR q tô acompanhando ... Olha ô EDUARDO MARCOLONGO ... na verdade não tô dando ApplyUpdates no datail, mas q eu me lembre, eu nunca fiz isso ... Mesmo pq, no Provider do Client (master), lá nas opções, as opções PoCascadeDeletes e PoCascadeUpdates estão como TRUE ... E ate´onde me recordo, isso deveria fazer c/ q ... qualquer alteração no Master ou no Detalhe ... deveria "repercutir" no outro correto ??? ô ERILEY VILAGRANDE ... existe sim um parâmetro no detalhe q faz o relacionamento, tanto é q o relacionamento "em sí", está funcionando, ou seja ... as informações ... são exibidas corretamente, o q não está acontecendo, é o update ou delete ...tanto no Client Master, quanto no Detail ... entende ??? LEANDRO LÁZARO ... como disse ... assim q possível .. vou "testar" sua sugestão, OK !!! Obrigado a todos por enquanto, e qualquer novidade ... posto aqui ... de preferência ... ainda hj ... rsrsrs ...
Responder

Gostei + 0

22/09/2010

Advair Sousa

Boa tarde galera
olá Ricardo já tive esse problema, mesmo dando um applyupdate tanto no mestre ou detail, quando fechava o formulário e abria novamente não gravava os itens.E pesquisando achei uma dica que era a de mudar as opções do 
sqldataset o clientdataset MASTER  mudar a prorpiedade PROVIDERFLAGS pfInKey do campo chave para TRUE com isso consegui resolver.
tenta aí pra ver se resolve seu caso valeu
qualquer coisa tamos aí.

Responder

Gostei + 0

23/09/2010

Ricardo Santos

Pessoal ... Gostaria de poder dizer q tá tudo OK ... mas, infelizmente não !!! ERILEY - qto ao primeiro LINK, como eu já disse o relacionamento funciona, o q não tá funcionando é
justamente a gravação de alterações tanto no MASTER qto no DETAIL .. e no segundo LINK, segui EXATAMENTE
o q tá na matéria ... e constatei alguns erros, PRIMEIRO q na tabela Itens daquele exemplo ...
a chave primária .. teria q ser composta (CODIGO,CODIGOPEDIDO), pra q se possa inserir mais registros
(eu sei q não é de SUA autoria, mas tem esse probleminha, rsrsrsr) e SEGUNDO, q qdo executo
a aplicação, dá aquele famoso erro de Missing Provider ou Data Packet ... LEANDRO LÁZARO: Olha cara ... desculpe, mas tentei implementar sua sugestão ... mas tô c/ dúvida ...
o que seria o (TDPEDIDO) nos momentos de "StartTransaction", "Commit" ou "RollBack" ??? Por favor,
desculpe minha "ignorância" OK ??? rsrsrs ... ADVAIR - eu Já estou fazendo isso no PROVIDERFLAGS ... Bom pessoal ... é isso ... Só tem um pequeno "detalhe" q esquecí de mencionar,
em minhas tabelas MASTER e DETALHE, não uso CHAVES PRIMÁRIAS ... eu uso "CHAVES UNICAS",
por exemplo: ALTER TABLE CDS ADD UNIQUE (CODCD)   e    ALTER TABLE MUSICAS ADD UNIQUE (CODCD, ORDEM),
mas acredito não ser esse o problema, pois já funcionava em outra ocasião ... Desde já agradeço à TODOS ...
Responder

Gostei + 0

23/09/2010

Leandro Carvalho

No evento oncreate do seu data module ondem se encontram as tabelas tu faz essa declaração:
 TDPedido.TransactionID := 1;
 TDPedido.IsolationLevel := xilREADCOMMITTED;
 TDItemPedido.TransactionID := 1;
 TDItemPedido.IsolationLevel := xilREADCOMMITTED;


E declare a variavel:
TDPedido, TDItemPedido: TTransactionDesc;
Responder

Gostei + 0

26/09/2010

Ricardo Santos

Pessoal ... tenhos "novidades" ... Continuando MINHA saga rumo à resolução desse grandioso mistério, descobrí mais alguns "detalhes" ...   Não sei como isso não havia passado pela minha cabeça antes, mas fui "lembrado" por um amigo. Por isso fiz o seguinte: coloquei um Showmessage(e.message), no evento OnReconcile do Client Master ... deletei um registro do Client Detail ... e qdo fui dar um ApplyUdates no Client Master ... apareceu a mensagem:   Update affected more than 1 record.   Parece q a alteração (no caso, exclusão de um registro no detalhe), está "afetando" mais de 1 registro !!!   Não consigo entender tal "comportamento" ... Será q alguém poderia me dar uma "luz" ?? Pq, não sei mais o q fazer, nem o q tentar ..   Obrigado ...
Responder

Gostei + 0

26/09/2010

Ricardo Santos

Então pessoal ... Fiz um pequeno "vídeo" caseiro só p/ tentar ILUSTRAR um pouco melhor o problema 
Responder

Gostei + 0

26/09/2010

Ricardo Santos

bom ... como eu estava dizendo ... fiz um pequeno Vídeo caseiro, pra tentar ILUSTRAR o problema q estou tendo c/ meu relacionamento MESTRE-DETALHE ...   Por favor, perdoem pela qualidade ... OK ???   O vídeo tá lá em:   http://www.youtube.com/watch?v=UKb28dZN9MA
Responder

Gostei + 0

27/09/2010

Ricardo Santos

É pessoal !!! Pelo q tô vendo, esse é mais um "daqueles" casos q não têm solução ...   Bom, como eu disse, já tentei TUDO o q me foi sugerido e/ou proposto aqui no forum, me parece q vou ter q APELAR e voltar a usar Win XP, pois esse problema só acontece em minha casa, pois no meu note, uso Win 7 !!!   Será q é esse o problema ???
Responder

Gostei + 0

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

Aceitar