Preciso de Dicas de como controlar itens em Master/Detalhes
Amigos, utilizo utilizo o relacionamento master/detalhes, para acesso ao banco utilizo os componentes da dbexpres com clientdataset. Minha dúvida é: qual a melhor forma de controlar os lançamentos na tabela itens, para evitar duplicação de chave, no meu sistema a tabela ´item ´ possui duas chaves estrangeiras que tbm é chave primária (idproduto e idvenda), o problema que quando estou incluindo um item se eu adicionar um item já incluso este item tambem é adicionado (metodo post) sem aparecer o erro de violação de chave, esse erro só aparece quando aplico o metodo (ApplyUpdates(0)). Qual a melhor forma de eu controlar esse erro na hora da inclusão do item?
Deu pra entender.?
Obrigado.
Deu pra entender.?
Obrigado.
Ant.neto
Curtidas 0
Respostas
Osocram
08/10/2009
Bom eu trabalho um pouco diferente
eu teria uma chave Id_venda e um Id_Venda_Item (incremental) e deixo o id_produto apenas como unique se necessário.
Bom a solução é a seguinte, (uma das soluções, existem várias). Assim que o usuario preencher o codigo do produto, vc faz um cloneCursor do seu dataSet detalhe para não perder o ponteiro de inserção e verifica se existe aquele produto ou não, se existir vc avisa que ja existe. Desta maneira vc avisa o usuário no ato que preencher o produto.
Outra maneira mas eu acho errado seria no beforePost vc verificar se o produto ja existe ou não e avisar o usuário.
Pq eu aconselho não deixar o id_produto como chave, bom ja aconteceu do clientes nossos que exigiram que pudessem colocar o mesmo produto mais de uma vez. E que so fizesse o somatorio deles qdo gerasse nota.
Outros pediram que se adicionar o mesmo produto deveria automaticamente somar a qtd no primeiro produto adicioinado.
Então o Id_produto pode ser ou não uma variável. O bom é que as PK fiquem livre disso.
Flw.
eu teria uma chave Id_venda e um Id_Venda_Item (incremental) e deixo o id_produto apenas como unique se necessário.
Bom a solução é a seguinte, (uma das soluções, existem várias). Assim que o usuario preencher o codigo do produto, vc faz um cloneCursor do seu dataSet detalhe para não perder o ponteiro de inserção e verifica se existe aquele produto ou não, se existir vc avisa que ja existe. Desta maneira vc avisa o usuário no ato que preencher o produto.
Outra maneira mas eu acho errado seria no beforePost vc verificar se o produto ja existe ou não e avisar o usuário.
Pq eu aconselho não deixar o id_produto como chave, bom ja aconteceu do clientes nossos que exigiram que pudessem colocar o mesmo produto mais de uma vez. E que so fizesse o somatorio deles qdo gerasse nota.
Outros pediram que se adicionar o mesmo produto deveria automaticamente somar a qtd no primeiro produto adicioinado.
Então o Id_produto pode ser ou não uma variável. O bom é que as PK fiquem livre disso.
Flw.
GOSTEI 0
Ant.neto
08/10/2009
Valew Osocram,
Como a base de dados ja está criada... e ja existe movimentaçoes de dados na base de dados, vou deixar o id do protudo como chave, mas achei interessante sua dica de eliminar o id do produto da chave.
Em relação a minha dúvida vou dar uma verificada de como funciona o cloneCursor. Ainda n trabalhe com ele, e como falei anteriormente, eu tratava este erro amntes do applyUp...
Vc. tem algum exemplo de como trabalhar com cloneCursor.
Obrigado.
Como a base de dados ja está criada... e ja existe movimentaçoes de dados na base de dados, vou deixar o id do protudo como chave, mas achei interessante sua dica de eliminar o id do produto da chave.
Em relação a minha dúvida vou dar uma verificada de como funciona o cloneCursor. Ainda n trabalhe com ele, e como falei anteriormente, eu tratava este erro amntes do applyUp...
Vc. tem algum exemplo de como trabalhar com cloneCursor.
Obrigado.
Bom eu trabalho um pouco diferente
eu teria uma chave Id_venda e um Id_Venda_Item (incremental) e deixo o id_produto apenas como unique se necessário.
Bom a solução é a seguinte, (uma das soluções, existem várias). Assim que o usuario preencher o codigo do produto, vc faz um cloneCursor do seu dataSet detalhe para não perder o ponteiro de inserção e verifica se existe aquele produto ou não, se existir vc avisa que ja existe. Desta maneira vc avisa o usuário no ato que preencher o produto.
Outra maneira mas eu acho errado seria no beforePost vc verificar se o produto ja existe ou não e avisar o usuário.
Pq eu aconselho não deixar o id_produto como chave, bom ja aconteceu do clientes nossos que exigiram que pudessem colocar o mesmo produto mais de uma vez. E que so fizesse o somatorio deles qdo gerasse nota.
Outros pediram que se adicionar o mesmo produto deveria automaticamente somar a qtd no primeiro produto adicioinado.
Então o Id_produto pode ser ou não uma variável. O bom é que as PK fiquem livre disso.
Flw.
GOSTEI 0
Osocram
08/10/2009
da uma procurada aqui no forum mesmo...
Eu mesmo ja postei em um topico um exemplo usando cloneCursor, e ja vi outros exemplos tbm.
flw.
Eu mesmo ja postei em um topico um exemplo usando cloneCursor, e ja vi outros exemplos tbm.
flw.
GOSTEI 0
Ant.neto
08/10/2009
da uma procurada aqui no forum mesmo...
Eu mesmo ja postei em um topico um exemplo usando cloneCursor, e ja vi outros exemplos tbm.
flw.
Grande osocram.. valew.. deu certo... utilize a função clone.. brigadão
GOSTEI 0
Osocram
08/10/2009
Opa, blz
Que bom que resolveu.
boa sorte ae no seu projeto.
Que bom que resolveu.
boa sorte ae no seu projeto.
GOSTEI 0