Fórum Master/Detail... Recuperar campo de uma terceira tabela #244098

22/07/2004

0

Caros amigos(as),

Tenho uma aplicação e estou desenvolvendo a parte de orçamento.
Preciso apresentar a descrição dos produtos que estão cadastrados na tabela de ítens do orçamento (não gravo a descrição na referida tabela).
Utilizo dbExpress como acesso aos dados e já tenho um vínculo NestedDetail entre a tabela principal do orçamento e a tabela de ítens.
Tentei realizar da seguinte forma, porém sem sucesso:
1o) Inclui na instrução SQL do componente de acesso aos ítens um ´inner join´ com a tabela de produtos e recuperei a descrição, porém ao tentar atualizar o BD, após uma edição do orçamento, me retorna um erro dizendo que o campo de descrição do produto não existe. Entendo que não posso vincular nenhuma tabela à tabela de ítens pois não poderei alterá-la.
2o) Criei um LookupField no ClientDataSet dos ítens para trazer a descrição do produto, mas ficou muito lento a ponto de inviabilizar a forma de vínculo.
3o) Fiz um NestedDetail entre os ítens e a tabela de produtos, mas desta forma eu não apresento a descrição no DBGrid, mas sim a informação (DATASET). Em seguida fiz um LookupField para tentar recuperar apenas a descrição, mas na hora de visualizar multiplicaram-se os ítens.

Existe alguma outra forma em que eu possa recuperar a descrição dos produtos e apresetá-lo no DBGrid?

Agradecido pela cooperação


Rafs

Rafs

Responder

Posts

23/07/2004

Aroldo Zanela

Colega,

Não entendi claramente seu problema, pois a forma mais usual é a utilização de lookups. Apesar disso, no caso exclusivo de tabela de vendas eu costumo ´replicar´ a descrição do item vendido na mesma, pois evita desgastes futuros com o Cliente se ´alguém´ modificar a descrição ao longo de sua utilização e precisar recuperar dados históricos posteriormente.


Responder

Gostei + 0

23/07/2004

Rafs

Caro colega,

Desculpe pela dificuldade na explanação, tentei resumir ao máximo para não deixar a mensagem longa, mas acredito que não tive tanto êxito.. :oops:
Pois então, eu tentei fazer com um Lookup, buscando de um outro ClientDataSet a descrição do produto, mas desta forma o sistema ficou muito lento, por isso a descartei.
Quanto a ´replicar´ a descrição no cadastro de orçamento eu havia pensado, mas achei que não sería viável, pois estaría duplicando a informação, o que entendo ser uma atitude não muito boa. Será que este conceito que tenho está equivocado? Pois tenho muita resistência a armazenar informações duplicadas, como por exemplo neste caso.


Responder

Gostei + 0

23/07/2004

Vinicius2k

Rafs,

Quanto ao erro quando da aplicação do método ApplyUpdates ele ocorre porque o seu campo de descrição não faz parte da tabela principal... é apenas um Join... para solucionar este problema vc precisa orientar o provider de que não tente atualizar este campo, setando no TField a propriedade ´Provider Flags -> [b:fd15943674]pfInUpdate[/b:fd15943674] e [b:fd15943674]pfInWhere[/b:fd15943674]´ para [b:fd15943674]false[/b:fd15943674].

Quanto à replicação de informações, existem ´casos´ e ´casos´... como o Aroldo disse existem situações que é melhor fazer isso... como exemplo um arquivo de Orçamentos, Pedidos e Notas Fiscais eu faço replicação de algumas colunas para evitar transtornos com reaproveitamento de códigos que os clientes, mesmo orientados a não fazer, costumam realizar... nos casos de Notas Fiscais é ainda mais grave a situação visto que, por lei, é obrigatória a manutenção dos dados por um determinado período, ou seja, uma N.F impressa em 1999, se for re-impressa hoje, tem que ser idêntica à original...

Espero ter ajudado...
T+


Responder

Gostei + 0

23/07/2004

Rafs

Aroldo Zanela e vinicius2k,

Muito obrigado, ajudaram e muito... :D

Diante das circunstâncis resolvi acrescentar o campo de descrição do produto no orçamento. Facilitou o manuseio e ainda agilizou o programa.

[]s


Responder

Gostei + 0

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

Aceitar