PROBLEMA COM MESTRE-DETALHE E LOOKUP
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
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
Curtidas 0
Respostas
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.
Qualquer coisa é só perguntar.
Espero ter colaborado.
GOSTEI 0
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.
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
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