PROBLEMA COM MESTRE-DETALHE E LOOKUP

Firebird

20/05/2010

Olá Galera, boa tarde!

        Eu fiz alguns programas e notei um problema quando uso lookup no detalhe do mestre-detalhe. Sendo assim, criei um sistema simples para que eu possa expôr minha dúvida:
       
        Criei um banco de dados chamado BD.fdb (Firebird) com 4 (quatro) tabelas:

         1) CDS, cujos fields são: IDCDS, NOME, PRECO;
         2) ESTILOS, cujos fields são: IDESTILOS, NOME, ANO;
         3) MUSICAS, cujos fields são: IDMUSICAS, TITULO, AUTO, IDESTILOS (fk), IDCDS (fk);
         4) MUSICASFAVORITAS, cujos fields são: IDMUSICASFAVORITAS, IDCDS (fk), IDMUSICAS (fk);
   
        Com isso criei o seguinte Data Module:



      Meu formulário Principal é o seguinte:



         Como pode-se ver, o Mestre-Detalhe funciona direitinho.

         Mas, ao realizar o cadastro das músicas favoritas com lookup de CDS e Músicas ocorre um problema. Por exemplo, ao realizar o cadastro de numero 6, eu informei que o CD que eu gosto é do United e a musica é Jesus. Quando eu salvei, todas as outras músicas somem. Ou seja, só aparece no grid o Mestre, mas os detalhes somem, ficando somente o último registro. Alguém sabe por que isso acontece?



       Pessoal, espero que entendam e que possam me ajudar.

       Grato,

       Rafael







Rafael Ribeiro

Rafael Ribeiro

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

20/05/2010

Após efetuar a gravação, efetue um refresh no seu ClientDataSet Favoritos, caso isto não resolver, o seu SQL deve estar "inorreto", ou seja, não está trazendo o que você quer.

Qualquer coisa é só perguntar.

Espero ter colaborado.
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

20/05/2010

E ai Rafael, tudo em cima? JA virou chefe ai na VW? kkk



Bem vamos lá. Primeiro existe um problema de modelagem no seu banco. A Tabela MUSICASFAVORITAS possui relação com MUSICAS e CDS porem MUSICAS ja tem relacão com CDS, assim relacionando MUSICAS sabemos automaticamente qual é o CD. 

O problema está ai pois quando criarmos um lookup estamos fazendo relação direta com um DataSet e no seu caso ao selecionar um CD no Lookup de Musicas favoritas você esta alterando o ponteiro do DataSet e com isso os controles podem ser perder.

Na verdade o que você quer requer 2 master details:

1) CDS e Musicas
2) Lista de Favoritas e Musicas

Altere da Tabelas MUSICASFAVORITAS para LISTA_FAVORITOS

LISTA_FAVORITOS fields são: IDLISTASFAVORITOS, DESCRIÇÃO;
LISTA_FAVORITOS_ITENS fields são: IDLISTASFAVORITOS, IDMUSICAS (fk);

No cadastro de musicas favoritas vc coloca um DBLookUpComboBox para exibir os nomes das músicas e gravar o ID das mesmas na tabela LISTA_FAVORITOS_ITENS.

Acho que é por ai.

Abraços e boa sorte.

GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

20/05/2010

Fala Rodrigo!!! O lance é que preciso que apareça o CD que é meu favorito. Este é um exmplo tosco, mas a solução dele me ajudaria a resolver um problemasso aqui!
GOSTEI 0
POSTAR